1.
class Solution {
public int maxProfit(int[] prices) {
//贪心法 收集相隔两天的利润
int res = 0;
for(int i=0;i<prices.length-1;i++){
//System.out.println(i);
int price = prices[i+1] - prices[i];
if(price > 0){
res = res + price;
}
}
return res;
}
}
2.
代码随想录 (programmercarl.com)
class Solution {
public boolean canJump(int[] nums) {
if (nums.length == 1) {
return true;
}
//覆盖范围, 初始覆盖范围应该是0,因为下面的迭代是从下标0开始的
int coverRange = 0;
//在覆盖范围内更新最大的覆盖范围
for (int i = 0; i <= coverRange; i++) {
coverRange = Math.max(coverRange, i + nums[i]); //下一步跳跃最远处
if (coverRange >= nums.length - 1) {
return true;
}
}
return false;
}
}
3.
class Solution {
public int jump(int[] nums) {
int maxPos = 0; // 当前走到的最远位置
int end = 0; //上次跳跃到达的右边界
int res = 0;
for (int i = 0; i < nums.length - 1; i++) { // 注意这里是小于nums.size() - 1,这是关键所在
maxPos = Math.max(nums[i] + i, maxPos); // 更新下一步覆盖的最远距离下标
if (i == end) { //到了右边界
end = maxPos; // 更新当前覆盖的最远距离下标
res++;
}
}
return res;
}
}