✿-35例题 贪心算法--跳跃游戏-55
一、题目

二、Java代码实现
package shuJuJieGou.ShuZuAndHash; /** * @Author : ASUS and xinrong * @Version : 2020/12/2 & 1.0 * 贪心 * 跳跃游戏-55 */ public class JumpGame { /** * 解法一:贪心算法 * 思路: * 对于当前遍历到的位置 x,如果它在最远可以到达的位置的范围内, * 那么就可以从起点通过若干次跳跃到达该位置, * 因此可以用 x+nums[x] 试着更新最远可以到达的位置。 * 在遍历的过程中,如果最远可以到达的位置大于等于数组中的最后一个位置, * 那就说明最后一个位置可达,就可以直接返回 true 作为答案。 * @param nums * @return * 复杂度分析: * 时间复杂度:O(n),其中 n为数组的大小。 * 空间复杂度:O(1),不需要额外的空间开销。 */ public boolean canJump(int[] nums) { //用max记录能到达的最远位置 int max = 0; //从头开始遍历 for(int i = 0; i < nums.length; i++){ //如果当前位置小于等于可达的最远位置 //就是说要确保之前的最远位置能走到当前位置,不然即使他更大也不奏效 if(i <= max){ //可以试着更新最远可达位置 max = Math.max(max, i + nums[i]); //满足条件直接退出,不需要再遍历后续位置 if(max >= nums.length - 1){ return true; } } } return false; } public static void main(String[] args) { JumpGame tiaoShuZu = new JumpGame(); boolean jump = tiaoShuZu.canJump(new int[]{2, 3, 1, 1, 4}); boolean jump2 = tiaoShuZu.canJump(new int[]{3, 2, 1, 0, 4}); System.out.println(jump); System.out.println(jump2); } }
浙公网安备 33010602011771号