Leetcode---跳跃游戏--贪婪

跳跃游戏

题目链接:跳跃游戏

思路:
  • 利用动态规划的思路:定义一个dp数组,存放每个对应的位置所能抵达的最远下标值,递归式为:dp[i] = max{dp[i-1],i+nums[i]},如果当前下标大于dp[i-1],说明当前下标是达不到的位置,故直接return false
  • 对上述数组转化为一个int型数,即变为贪婪,上述dp数组我们发现仅仅用到前一个数就可以得到更新,所以可以不定义数组,那么当前值的意义就是当前下标可以到达的最远下标是多少,如果当前下标大于该值,说明当前下标抵达不到,return false
	public boolean canJump(int[] nums) {
//		//定义一个dp[]
//		int[] dp = new int[nums.length];
//		dp[0] = nums[0];
//		for(int i=1;i<nums.length;i++) {
//			if(i<=dp[i-1]) {
//				dp[i] = Math.max(dp[i-1], i+nums[i]);
//			}else {
//				return false;
//			}
//		}
//		return true;
		int dp = nums[0];
		for(int i=1;i<nums.length;i++) {
			if(i<=dp) {
				dp = Math.max(dp, i+nums[i]);
			}else {
				return false;
			}
		}
		return true;
    }

猜你喜欢

转载自blog.csdn.net/tiaochewang219/article/details/85124289
今日推荐