代码随想录第32天|122.买卖股票的最佳时机 II,55. 跳跃游戏 ,45. 跳跃游戏 II

122.买卖股票的最佳时机 II

122. 买卖股票的最佳时机 II 

思路比较简单

class Solution {
    public int maxProfit(int[] prices) {
        int res=0,sum=0;

        for(int i=0;i<prices.length-1;i++){
            if(prices[i+1]-prices[i]>0){
                sum+=prices[i+1]-prices[i];
            }
            res=sum>res?sum:res;
        }
        return res;
    }
}

55. 跳跃游戏 

思路:贪心,index是能到达的最远下标,思路比较简单

代码实现

class Solution {
    public boolean canJump(int[] nums) {
        if (nums.length == 1) return true; // 只有一个元素,就是能达到
        if(nums[0]==0) return false;
        int index=0;
        for(int i=0;i<=index;i++){//这里要i<=index,而不是nums.length-1
          index=Math.max(index,i+nums[i]);
          if(index>=nums.length-1){return true;}

        }
        return false;
    }
}

45. 跳跃游戏 II

45. 跳跃游戏 II 

思路:第2遍做了,还是不会我哭

 再次深刻写下详细的注释

class Solution {
    public int jump(int[] nums) {

        int count=0;
        int end=0;//记录
        int maxposition=0;//记录下一次跳跃能到达的最大下标
        //注意点1 遍历数组不用遍历到nums[len-1],为什么?因为到最后我们的end其实是>=len-1的,如果让i==len-1而恰巧此时的en刚好也是len-1的话,就平白增加一次count
        //注意点2 一个一个遍历,为什么要一个一个遍历?因为从下标i到最远位置,每个下标x的nums[x]都未知,谁知道哪个下标才是这个范围中最大的,因此我们需要遍历
        for(int i=0;i<nums.length-1;i++){
            maxposition=Math.max(maxposition,i+nums[i]);//从下标i出发能到达的最远位置
            if(end==i){//说明就是从下标i-->最远位置都遍历过了,这个时候就可以放心地更新end来确定最远位置
                end=maxposition;
                count++;
            }
            if(end>=nums.length-1){
                 return count;
            }

        }
       return 0;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值