45. 跳跃游戏 II
贪心算法
package leetcode; public class demo_45 { public int jump(int[] nums) { int end=nums.length-1; int step=0; int far; while(end>0) { far=end; //贪心算法:贪心策略记录每一次离末尾边界最远的点 for(int i=0;i<end;i++) { if(i+nums[i]>=end) { if(i<far) {far=i;} } } step=step+1; end=far; } System.out.println(step); return step; } public static void main(String[] args) { // TODO Auto-generated method stub demo_45 d45=new demo_45(); int nums[]= {2,3,1,1,4}; d45.jump(nums); } }
简化版O(n)
public int jump(int[] nums) { int end=0; int step=0; int max=0; for(int i=0;i<nums.length;i++) { //每一次跳跃最远能跳到的距离 if(i<=end) { if(nums[i]+i>max) { max=nums[i]+i; } } else { step=step+1; end=max; max=nums[i]+i; } } System.out.println(step); return step; }
浙公网安备 33010602011771号