买卖股票的最佳时机
只收集正利润即可!
class Solution {
public int maxProfit(int[] prices) {
int sum=0;
for(int i=0;i<prices.length-1;i++){
if(prices[i+1]-prices[i]>0){//只收集正利润
sum+=prices[i+1]-prices[i];
}
}
return sum;
}
}
跳跃游戏
看覆盖范围,如果覆盖到终点就解出来了,cover用于补充
Cover=Max(cover,nums[i]+i),cover不断更新,让扩大范围一直变大。
class Solution {
public boolean canJump(int[] nums) {
int cover=0;
if(nums.length==1) return true;
for(int i=0;i<=cover;i++){//此处cover可以更新
if(cover>=nums.length-1) return true;
cover=Math.max(i+nums[i],cover);
}
return false;
}
}
跳跃游戏2
每次选择最远的覆盖距离,i==end时则count++
class Solution {
public int jump(int[] nums) {
if(nums.length==1) return 0;
int end=0;//每次能覆盖的最大终止位置
int next=0;
int count=0;
for(int i=0;i<=end;i++){
next=Math.max(next,nums[i]+i);
if(i==end){
count++;
end=next;
}
if(end>=nums.length-1) break;
}
return count;
}
}