class Solution {
public int maxProfit(int[] prices) {
int res=0;
for(int i =1;i<prices.length;i++){
if((prices[i]-prices[i-1])>0){
res+=prices[i]-prices[i-1];
}
}
return res;
}
}
局部最优,每次遍历都找最大的覆盖范围,
全局最优,到最后就是整个数组跳跃的最大范围。
public class Solution {
public boolean canJump(int[] nums) {
int range = 0;
for(int i = 0;i<=range;i++){
range = Math.max(range,i+nums[i]);
if(range>=nums.length-1){
return true;
}
}
return false;
}
}
跳跃几次,更新几次覆盖范围
因为这个范围可以一次选择跳动的,更改范围,说明一次挑不到,要再跳
所以count++再新范围这里。
class Solution {
public int jump(int[] nums) {
if(nums.length==1){
return 0;
}
int range = 0;
int count = 0;
int maxRange = 0;
for(int i =0;i<=range;i++){
maxRange = Math.max(maxRange,i+nums[i]);
if(maxRange >= nums.length-1){//养成类似范围写成>=的习惯,不容易报错
count++;
break;
}
if(i==range){
range = maxRange;
count++;
}
}
return count;
}
}