leetcode 中等难度 第55题 跳跃游戏

    技术2022-07-11  143

    给定一个非负整数数组,你最初位于数组的第一个位置。

    数组中的每个元素代表你在该位置可以跳跃的最大长度。

    判断你是否能够到达最后一个位置。

    最先想到的就是这个,一个一个的来。

    class Solution { public boolean canJump(int[] nums) { if(nums.length == 0) return false ; boolean[] ans = new boolean[nums.length]; for(int i = 0 ; i < ans.length ; i ++){ ans[i] = false ; } if(nums[0] == 0 && nums.length != 1){return false;} ans[0] = true ; for(int i = 0 ; i < nums.length ; i ++){ int j = i ; while(nums[i] != 0 && ans[j] == true && j <nums.length-1){ ans[j+1] = true ; nums[i]--; j++; } } return ans[ans.length-1]; } }

    时间复杂度和空间复杂度都很高。

    看了看人家的解法。

    class Solution { public boolean canJump(int[] nums) { int n = 1 ;//第i个数到最后需要的长度 for(int i = nums.length-2; i >=0 ; i --){ if(nums[i] >= n){ n = 1 ; }else{ n++ ; } if(i==0&&n>1){ return false; } } return true ; } }

    很妙,从后往前遍历,直到最后,i==0的时候,还是没有能够达到。速率很开。

    Processed: 0.011, SQL: 9