代码随想录算法训练营 Day 32 | 122.买卖股票的最佳时机II,55.跳跃游戏,45.跳跃游戏II

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

讲解链接:代码随想录-122.买卖股票的最佳时机II 

贪心算法经典题目了,只要后一天涨,就计算收益。

public int maxProfit(int[] prices) {
    int result = 0;
    for (int i = 1; i < prices.length; i++) {
        int diff = prices[i] - prices[i - 1];
        if (diff > 0) {
            result += diff;
        }
    }
    return result;
}

55.跳跃游戏

讲解链接:代码随想录-55.跳跃游戏 

重点理解范围,如果当前能跳跃的范围大于数组,就可以返回true。同时注意for循环的终止条件,在范围内递增,当超出范围还没大于数组下标的时候,就返回false。

public boolean canJump(int[] nums) {
    int cover = 0;
    for (int i = 0; i <= cover; i++) {
        // 让范围变量一直取能到达的最大下标。
        cover = Math.max(nums[i] + i, cover);
        if (cover >= nums.length - 1) return true;
    }
    return false;
}

45.跳跃游戏II

讲解链接:代码随想录-45.跳跃游戏II

这道题跟前一道其实查的挺多的,这里必定可以跳出,需要求出最小跳跃次数,所以我们需要每次都寻得下一次跳跃的最大区间。

public int jump(int[] nums) {
    int result = 0;
    int curDistance = 0;
    int nextDistance = 0;
    // 需要循环整个数组
    for (int i = 0; i < nums.length; i++) {
        nextDistance = Math.max(nextDistance, nums[i] + i);
        // 如果下标到达当前距离
        if (i == curDistance) {
            // 如果当前下标还没到数组末尾,就把下一次能走到的最大距离给当前距离,然后次数+1.
            if (curDistance < nums.length - 1) {
                curDistance = nextDistance;
                result++;
            } else {
                // 反之,已经到达数组末尾,直接挑出循环。
                break;
            }
        }
    }
    return result;
}

总结

我的建议:牢记题目。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值