leetcode第55题

简介: 当自己按照 45 题的思路写完的时候,看 Solution 的时候都懵逼了,这道题竟然这么复杂?不过 Solution 把问题抽象成动态规划的思想,以及优化的过程还是非常值得学习的。

image.png

45题的时候已经见过这道题了,只不过之前是返回从第 0 个位置能跳到最后一个位置的最小步数,这道题是返回是否能跳过去。

leetCode Solution 中给出的是动态规划的解法,进行了一步一步的优化,但都也比较慢。不过,思路还是值得参考的,上边说的比较详细,这里就不啰嗦了。这里,由于受到 45 题的影响,自己对 45 题的解法改写了一下,从而解决了这个问题。

下边的解法都是基于45题 的想法,大家可以先过去看一下,懂了之后再回到下边来看。

解法一 顺藤摸瓜

45 题的代码。

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

这里的话,我们完全可以把 step 去掉,并且考虑下当前更新的 i 是不是已经超过了边界。

publicbooleancanJump(int[] nums) { 
intend=0;
intmaxPosition=0;  
for(inti=0; i<nums.length-1; i++){
//当前更新超过了边界,那么意味着出现了 0 ,直接返回 falseif(end<i){
returnfalse;
        }
//找能跳的最远的 maxPosition=Math.max(maxPosition, nums[i] +i); 
if( i==end){ //遇到边界,就更新边界,并且步数加一end=maxPosition; 
        }
    }
//最远的距离是否到答末尾returnmaxPosition>=nums.length-1;
}

时间复杂度:O(n)。

空间复杂度:O(1)。

当自己按照 45 题的思路写完的时候,看 Solution 的时候都懵逼了,这道题竟然这么复杂?不过 Solution 把问题抽象成动态规划的思想,以及优化的过程还是非常值得学习的。


相关文章
|
13天前
【LeetCode 02】暴力法总结
【LeetCode 02】暴力法总结
13 1
|
5月前
|
Java
leetcode-474:一和零
leetcode-474:一和零
38 0
顺手牵羊(LeetCode844.)
好多同学说这是双指针法,但是我认为叫它顺手牵羊法更合适
72 0
|
算法
LeetCode——944. 删列造序
LeetCode——944. 删列造序
105 0
|
C++ Python
LeetCode 771. Jewels and Stones
LeetCode 771. Jewels and Stones
77 0
leetcode第36题
一个 9 * 9 的数独的棋盘。判断已经写入数字的棋盘是不是合法。需要满足下边三点, • 每一行的数字不能重复 • 每一列的数字不能重复 • 9 个 3 * 3 的小棋盘中的数字也不能重复。 只能是 1 - 9 中的数字,不需要考虑数独最后能不能填满
leetcode第36题
leetcode第37题
从上到下,从左到右遍历每个空位置。在第一个位置,随便填一个可以填的数字,再在第二个位置填一个可以填的数字,一直执行下去直到最后一个位置。期间如果出现没有数字可以填的话,就回退到上一个位置,换一下数字,再向后进行下去。
leetcode第37题
leetcode第44题
时间复杂度:text 长度是 T,pattern 长度是 P,那么就是 O(TP)。 空间复杂度:O(TP)。 同样的,和第10题一样,可以优化空间复杂度。
leetcode第44题
|
存储
leetcode第57题
和上一道可以说是一个问题,只不过这个是给一个已经合并好的列表,然后给一个新的节点依据规则加入到合并好的列表。 解法一 对应 56 题的解法一,没看的话,可以先过去看一下。这个问题其实就是我们解法中的一个子问题没看的话,可以先过去看一下。这个问题其实就是我们解法中的一个子问题, 所以直接加过来就行了
leetcode第57题
leetcode第48题
将一个矩阵顺时针旋转 90 度,并且不使用额外的空间。大概属于找规律的题,没有什么一般的思路,观察就可以了。 解法一 可以先转置,然后把每列对称交换交换一下
leetcode第48题