122.买卖股票的最佳时机II
贪心算法经典题目了,只要后一天涨,就计算收益。
public int maxProfit(int[] prices) {
int result = 0;
for (int i = 1; i < prices.length; i++) {
int diff = prices[i] - prices[i - 1];
if (diff > 0) {
result += diff;
}
}
return result;
}
55.跳跃游戏
讲解链接:代码随想录-55.跳跃游戏
重点理解范围,如果当前能跳跃的范围大于数组,就可以返回true。同时注意for循环的终止条件,在范围内递增,当超出范围还没大于数组下标的时候,就返回false。
public boolean canJump(int[] nums) {
int cover = 0;
for (int i = 0; i <= cover; i++) {
// 让范围变量一直取能到达的最大下标。
cover = Math.max(nums[i] + i, cover);
if (cover >= nums.length - 1) return true;
}
return false;
}
45.跳跃游戏II
讲解链接:代码随想录-45.跳跃游戏II
这道题跟前一道其实查的挺多的,这里必定可以跳出,需要求出最小跳跃次数,所以我们需要每次都寻得下一次跳跃的最大区间。
public int jump(int[] nums) {
int result = 0;
int curDistance = 0;
int nextDistance = 0;
// 需要循环整个数组
for (int i = 0; i < nums.length; i++) {
nextDistance = Math.max(nextDistance, nums[i] + i);
// 如果下标到达当前距离
if (i == curDistance) {
// 如果当前下标还没到数组末尾,就把下一次能走到的最大距离给当前距离,然后次数+1.
if (curDistance < nums.length - 1) {
curDistance = nextDistance;
result++;
} else {
// 反之,已经到达数组末尾,直接挑出循环。
break;
}
}
}
return result;
}
总结
我的建议:牢记题目。。