代码随想录第三十三天
- Leetcode 122. 买卖股票的最佳时机 II
- Leetcode 55. 跳跃游戏
- Leetcode 45. 跳跃游戏 II
Leetcode 122. 买卖股票的最佳时机 II
题目链接: 买卖股票的最佳时机 II
自己的思路:根本想不到!!!
正确思路:遇到相邻两天的正利润就收集到结果中,贪心贪在如果相邻两条不是正利润我就不买也不卖!!!
代码:
class Solution {public int maxProfit(int[] prices) {int result = 0;for(int i=1;i<prices.length;i++){//遇到正数,收集起来if (prices[i]-prices[i-1]>0){result += prices[i]-prices[i-1];}}return result;}
}
复杂度分析:
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)
Leetcode 55. 跳跃游戏
题目链接: 跳跃游戏
自己的思路:根本想不到!!!
正确思路:不需要去关注每次跳几步才能到终点,只需要关注当前点索引+当前点索引对应的值的大小,遍历整个数组,找出最大的那个,如果最大的那个可以到终点,那么说明可以到终点,如果不可以,则不能到终点!!!
代码:
class Solution {public boolean canJump(int[] nums) {int cover = 0;for (int i =0;i<=cover;i++){//重新选覆盖范围cover = Math.max(i+nums[i],cover);if (cover>=nums.length-1) return true;}return false;}
}
复杂度分析:
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( n ) \mathcal{O}(n) O(n)
Leetcode 45. 跳跃游戏 II
题目链接: 跳跃游戏 II
自己的思路:只能说一道题一个样,完全没思路!!
正确思路:贪心贪在最少步数到终点!!!好像句废话,这道题和跳跃游戏题目类似,其实都是从覆盖范围上考虑,我们只需要关注最大覆盖范围的,记录最大的覆盖范围和当前点的覆盖范围!!!
代码:
class Solution {public int jump(int[] nums) {if (nums.length==1) return 0;int result = 0;//当前点的覆盖范围int cur = 0;//最大的覆盖范围int max = 0;for (int i =0;i<nums.length;i++){//记录最大的覆盖范围max = Math.max(max,nums[i]+i);//如果覆盖区域大于了最大索引,说明再走一步就可以到最后了if (max>=nums.length-1){result++;break;}//如果当前点覆盖索引的位置if (i==cur){cur = max;result++;}}return result;}
}
复杂度分析:
时间复杂度: O ( n ) \mathcal{O}(n) O(n)
空间复杂度: O ( 1 ) \mathcal{O}(1) O(1)