贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

贪心算法的经典案例:

跳跃游戏:

给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。

例如:[2,3,1,1,4,2,2,1]     很明显最短路线:2跳到3的位置,再跳到4的位置,然后就可以跳到最后。

算法思路:(绿色圈表示当前位置,橙色表示能够达到的最远距离)

从第一个数字2开始,能达到橙色1的位置。能达到的最远位置变更。

走到绿色3的位置,这个位置能达到的最远位置变成橙色4的位置,最远位置变更,步数加一。

继续走到绿色1的位置,这个位置能达到的最远位置不如橙色4的位置,最远位置没有变化,步数不变。

继续走到绿色1的位置,这个位置能达到的最远位置不如橙色4的位置,最远位置没有变化,步数不变。

继续走到绿色4的位置,这个位置能达到的最远位置为橙色1的位置,最远位置变化,步数加一,且已经到达终点,循环结束。

该算法:

时间复杂度:O(n)O(n)。

空间复杂度:O(1)O(1)。

代码如下:

public class Subject92 {

    public static void main(String[] args) {
int[] arrInt = new int[]{2,3,1,1,4,2,1};
System.out.println(new Subject92().jump(arrInt));
} public int jump(int[] nums) {
//小于等于1的都不需要跳
int lengths = nums.length;
if(lengths <= 1){
return 0;
}
int reach = 0; //当前能走的最远距离
int nextreach = nums[0];
int step = 0; //需要步数
for(int i = 0;i<lengths;i++){
//贪心算法核心:这一步是不是可以比上一步得到更多步数,可以则取最新的路线。
nextreach = Math.max(i+nums[i],nextreach);
if(nextreach >= lengths-1) return (step+1);
if(i == reach){
step++;
reach = nextreach;
}
}
return step;
}
}

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/jump-game-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

最新文章

  1. Symmetric Tree
  2. 第 17 章 CSS 边框与背景[下]
  3. eclipse插件:打开选中文件所在的目录
  4. DFS &amp; BFS
  5. P1351 联合权值
  6. Cannot change version of project facet Dynamic web的解决方法
  7. POJ1474 Video Surveillance(半平面交)
  8. solr 搜索引擎
  9. Spring MVC 3.0 返回JSON数据的方法
  10. Go语言环境配置 Sublime Text + GoSublime+ gocode + MarGo组合
  11. app 转caf 音频 代码
  12. webpack(3)-管理资源
  13. Javaweb学习笔记——(十七)——————JDBC的原理、四大核心类、四大参数、预编译、Dao模式、批处理、大数据、时间类型的转换
  14. 在excel中如何利用vba通过网址读取网页title(网址是https的)?
  15. stm32中断遵循原则
  16. PHP Fatal error: Call to undefined function mysql_connect() 错误解释
  17. 与servlet相关的接口
  18. BZOJ1935: [Shoi2007]Tree 园丁的烦恼(树状数组 二维数点)
  19. Android手势密码实现
  20. Oracle Instant Client

热门文章

  1. ubuntu server 1604 搭建FTP服务器
  2. (六)OpenStack---M版---双节点搭建---Neutron安装和配置
  3. linux终端操作
  4. 微信小程序获取二维码(直接上代码)https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=ACCESS_TOKEN
  5. windows安装Pytorch报错:from torch._C import * ImportError: DLL load failed: 找不到指定的模块”解决方案
  6. Python大神必须掌握的技能:多继承、super和MRO算法
  7. 腾讯iphone面试题(转)
  8. .Net Core3.1下使用Swagger搭建web api项目
  9. 使用生成对抗网络(GAN)生成手写字
  10. 浅析babel产出