122. 买卖股票的最佳时机 II
- 学习文章链接:
- 思路:局部最优:相隔两天的差值如果 > 0,则保留,否则这天不交易,即该天的利润为0。进而推到全局最优。
- 代码:
class Solution {
public int maxProfit(int[] prices) {
int res = 0;
for (int i = 1;i < prices.length; i++) {
res += Math.max(prices[i] - prices[i - 1], 0);
}
return res;
}
}
55. 跳跃游戏
- 学习文章链接:
- 思路:寻找最大的覆盖范围,如果能够将数组覆盖上,则能够到达最后一个目标。需要考虑初始情况,即长度为1的时候,这种情况是直接到达了最末端的。
- 代码:
class Solution {
public boolean canJump(int[] nums) {
if (nums.length == 1) return true;
int cover = 0;
for (int i = 0; i <= cover; i++) {
cover = Math.max(cover, nums[i] + i);
if (cover >= nums.length - 1) return true;
}
return false;
}
}
45.跳跃游戏II
- 学习文章链接:
- 思路:解题的时候有个疑问:为什么没走的时候,curDistance=0时,res++? 可以理解成res++,之后再curDistance更新。
- 代码:
class Solution {
public int jump(int[] nums) {
if (nums.length == 1) return 0;
int curDistance = 0;
int nextDistance = 0;
int res = 0;
for (int i = 0; i < nums.length; i++) {
nextDistance = Math.max(nextDistance, nums[i] + i);
if (curDistance == i) {
if (curDistance != nums.length - 1) {
res++;
curDistance = nextDistance;
if (curDistance >= nums.length - 1) break;
} else break;
}
}
return res;
}
}