● 122.买卖股票的最佳时机II
● 55. 跳跃游戏
● 45.跳跃游戏II
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/
class Solution {
public int maxProfit(int[] prices) {
//p[3]-p[0]=p[3]-p[2]+p[2]-p[1]+p[1]-p[0];
//每段都算出来存入数组中(正负数都存进去),只取>0的进行相加
int[] dayPrice=new int[prices.length-1];
int result=0;
for(int i=1;i<prices.length;i++){
dayPrice[i-1]=prices[i]-prices[i-1];
}
for(int i=0;i<dayPrice.length;i++){
if(dayPrice[i]>0){
result+=dayPrice[i];
}
}
return result;
}
}
https://leetcode.cn/problems/jump-game/description/
class Solution {
public boolean canJump(int[] nums) {
//最初位于数组的第一个下标 ,每个元素代表你在该位置可以跳跃的最大长度
//判断你是否能够到达最后一个下标
//我们不去纠结每次跳多少,怎么跳
//而是去看跳了之后能不能把最后一个覆盖到
//对于只有一个元素的数组,//无论如何他都是在最后一个下标了
if(nums.length==1){return true;}
//只能是在我们的股改范围内移动
int cover=0;
for(int i=0;i<=cover;i++){
//cover=i+nums[i];//到达覆盖位置的下标
//再覆盖范围内更新最大覆盖范围
cover=Math.max(i+nums[i],cover);
if(cover>=nums.length-1){
//到达最后位置的下标
return true;
}
}
//都结束了,还没有返回,那就是没有能达到最后一个下标了
return false;
}
}
https://leetcode.cn/problems/jump-game-ii/description/
class Solution {
public int jump(int[] nums) {
//当数组元素只有一个的时候,跳跃到下标为最后一个步数为0
if(nums.length==1){
return 0;
}
//当前覆盖范围的下标
int cur=0;
//下一次覆盖范围的下标
int next=0;
//记录结果
int result=0;
for(int i=0;i<nums.length;i++){
//记录下一次的覆盖范围,每次都记录最大的覆盖范围
next=Math.max(next,i+nums[i]);
//如果当前的下标已经到了当前的覆盖范围了
if(i==cur){
//如果当前覆盖范围不是最后下标的位置
if(cur!=nums.length-1){
//那么就让当前覆盖范围到上面记录的下一次的坐标
cur=next;
//累加步数
result++;
//如果当前覆盖范围大于或者等于数组最后下标位置,那么终止循环
if(cur>=nums.length-1){break;}
}else{
//到了最后一个位置,那么步数也早就更新了
//跳出循环
break;
}
}
}
return result;
}
}