题目
题目链接:
https://www.nowcoder.com/practice/23407eccb76447038d7c0f568370c1bd
思路
答案说的merge区间就是每个A[i]的地方能跳到的最远坐标是A[i] + [i],
有一个maxReach,遍历一遍A[i], 不断刷新MaxReach, 如果某个i 位置比maxReach要大,
则说明这点跳不过去, return false,否则的话这点可以跳过去,
只要能遍历完就可以return true了
参考答案Java
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param nums int整型一维数组* @return bool布尔型*/public boolean canJump (int[] nums) {//DP/*答案说的merge区间就是每个A[i]的地方能跳到的最远坐标是A[i] + [i],有一个maxReach,遍历一遍A[i], 不断刷新MaxReach, 如果某个i 位置比maxReach要大,则说明这点跳不过去, return false,否则的话这点可以跳过去,只要能遍历完就可以return true了*/int maxReach = nums[0];for (int i = 1; i < nums.length ; i++) {if (i <= maxReach) {maxReach = Math.max(maxReach, nums[i] + i);} else {return false;}}return true;}
}
参考答案Go
package main/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param nums int整型一维数组* @return bool布尔型*/
func canJump(nums []int) bool {//DP/*答案说的merge区间就是每个A[i]的地方能跳到的最远坐标是A[i] + [i],有一个maxReach,遍历一遍A[i], 不断刷新MaxReach, 如果某个i 位置比maxReach要大,则说明这点跳不过去, return false,否则的话这点可以跳过去,只要能遍历完就可以return true了*/maxReach := nums[0]for i := 1; i < len(nums); i++ {if i <= maxReach {cur := nums[i] + iif cur >= maxReach {maxReach = cur}} else {return false}}return true
}
参考答案PHP
<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param nums int整型一维数组 * @return bool布尔型*/
function canJump( $nums )
{//DP/*答案说的merge区间就是每个A[i]的地方能跳到的最远坐标是A[i] + [i],有一个maxReach,遍历一遍A[i], 不断刷新MaxReach, 如果某个i 位置比maxReach要大,则说明这点跳不过去, return false,否则的话这点可以跳过去,只要能遍历完就可以return true了*/$maxReach = $nums[0];for($i=1;$i<count($nums);$i++){if($i<=$maxReach){$cur = $nums[$i]+$i;if($cur>$maxReach){$maxReach = $cur;}}else{return false;}}return true;
}