Leetcode 122.买卖股票的最佳时机II 55. 跳跃游戏 45. 跳跃游戏 II

文章记录了作者在LeetCode上学习和解决122.买卖股票的最佳时机II、55.跳跃游戏及45.跳跃游戏II的问题。作者分享了自己的思考过程、解题策略以及遇到的困难,每个问题都包括了从初见题目的想法到理解解题思路的转变,最后总结了每日的学习收获和时长。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


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


● 今日学习的Leetcode链接

买卖股票的最佳时机II

● 自己看到题目的第一想法

因为可以在同一天买进卖出,所以只要今天比昨天大,就代表昨天可以买入,也就是直接利润加今天-昨天

● 看完代码随想录之后的想法

一样

● 自己实现过程中遇到哪些困难

思路不好想,题目条件描述的不太精准

● 今日收获,记录一下自己的学习时长

很快

public int maxProfit(int[] prices) {
        if(prices.length == 1){
            return 0;
        }

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

55. 跳跃游戏


● 今日学习的Leetcode链接

跳跃游戏

● 自己看到题目的第一想法

每次都跳到现在能跳的最远位置(错误)[2,5,0,0]

● 看完代码随想录之后的想法

  1. 关键在于可跳的覆盖范围,要一步一比较,不能跳过,因为这样可能不是最远的结果
  2. 每走一步,就比较上一次的最远的下标和当前最远的下标。
  3. for循环的终止条件应该是最远距离的下标,而不应该是数组的length

● 自己实现过程中遇到哪些困难

没有思路

● 今日收获,记录一下自己的学习时长

 public boolean canJump(int[] nums) {
        if(nums.length==1){
            return true;
        }

        int maxIndex = 0;
        
        for(int i = 0;i<=maxIndex;i++){
            maxIndex = Math.max(maxIndex,i+nums[i]);
            if(maxIndex>=nums.length-1){
                return true;
            }
        }
        return false;
    }

45. 跳跃游戏 II


● 今日学习的Leetcode链接

跳跃游戏 II

● 自己看到题目的第一想法

没有注意题目要求的两个点

  1. 一定会到达终点
  2. 在前边题的基础上,要求了最小步数

● 看完代码随想录之后的想法

只需记录每次的最大值,不需要知道是哪一步跳出的当前范围下标。只要当前下标走不下去了,范围就换成目前最大下标,并且步数+1

● 自己实现过程中遇到哪些困难

完全没思路

● 今日收获,记录一下自己的学习时长

很长

 public int jump(int[] nums) {
        if (nums == null || nums.length == 0 || nums.length == 1) {
            return 0;
        }
        //记录跳跃的次数
        int count=0;
        //当前的覆盖最大区域
        int curDistance = 0;
        //最大的覆盖区域
        int maxDistance = 0;
        for (int i = 0; i < nums.length; i++) {
            //在可覆盖区域内更新最大的覆盖区域
            maxDistance = Math.max(maxDistance,i+nums[i]);
            //说明当前一步,再跳一步就到达了末尾
            if (maxDistance>=nums.length-1){
                count++;
                break;
            }
            //走到当前覆盖的最大区域时,更新下一步可达的最大区域
            if (i==curDistance){
                curDistance = maxDistance;
                count++;
            }
        }
        return count;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值