贪心算法 01

76 阅读1分钟

LeetCode45.跳跃游戏 II

原题链接

题解思路:

题解

leetcode-cn.com/problems/ju…

代码如下:

/*
 * 贪心算法
 * 
 * 指针i 从头到尾依次遍历数组,假设以每个元素作为起点开始跳跃
 * 每一次跳后,寻找能跳的最远点,并记录下来,用maxPosition记录,它是一个变量。
 * 如果指针i 遍历到之前记录的最远点(用边界end记录)时,则更新边界end。
 * 此时更新完后的边界end 在 指针i 的后面,
 * 指针i 每次遇到之前记录最远点(end)则step++
 * 
 * Note:指针i 不能遍历最后一个元素,因为遍历前面的元素就可以跳到最后一个位置
 *		 如果遍历最后一个元素,则step会多记录一步
 *
 * Code by java
 */
class Solution {

//	public static void main(String[] args) {
//		int[] kk = { 2,3,1,1,4 };
//		System.out.println(Solution.jump(kk));
//	}

	public /* static */ int jump(int[] nums) {
	    int end = 0;
	    int maxPosition = 0; 
	    int steps = 0;
	    for(int i = 0; i < nums.length - 1; i++){
	        maxPosition = Math.max(maxPosition, nums[i] + i); //找能跳的最远的
	        if( i == end){ 					//遇到边界,就更新边界,并且步数加一
	            end = maxPosition;
	            steps++;
	        }
	    }
	    return steps;
	}
}