leetcode 刷题 log day 32

  • 122. 买卖股票的最佳时机 ||
    思路】按照局部最优推出全局最优的思路。局部最优是获得最小买卖单位内的最大利润,就可以在全局最优获得最小买卖单位的最大利润。即当股票价格递增时,就买入第二天卖出。每天对股票进行操作。

    var maxProfit = function(prices) {
        // 价格递增的话就每天买入买出
        let res = 0;
        for (let i = 1; i < prices.length; i++) {
            if (prices[i] - prices[i - 1] > 0) res += prices[i] - prices[i - 1];
        }
    
        return res;
    };
    
  • 55. 跳跃游戏
    思路】局部最优:每一次都跳到可以到达的最远距离,全局最优就可以判断是否可以到达终点。

    var canJump = function(nums) {
        let cover = 0;
        for (let i = 0; i <= cover; i++) {
            cover = Math.max(cover, i + nums[i]);  // 目前所能到达的最远距离
            if (cover >= nums.length - 1) return true;
        }
            return false;
    };
    
  • 45. 跳跃游戏 ||
    思路】记录这一次和下一次的最大覆盖范围,如果走到了这一步最大的覆盖范围还没走到,那么步数就要加 1,下一步的覆盖范围就变成了当前的覆盖范围,继续循环判断,当覆盖范围比数组长度大或等于时,就说明下一步就可以走到终点。
    这道题还是想了蛮久的,感觉有点绕不过来。

    var jump = function(nums) {
        let cur = 0, next = 0, res = 0;
        for (let i = 0; i < nums.length - 1; i++) {
            next = Math.max(nums[i] + i, next);
            console.log(next, cur);
            if (i === cur) {
                res ++;
                cur = next;
            }
        }
        return res;
    };
    var jump = function(nums) {
       if (nums.length === 1) return 0;
       let cur = 0,  // 当前覆盖最远距离下标
           res = 0,  // 记录当前最大步数
           next = 0;  // 下一步覆盖最远距离下标
       for (let i = 0; i < nums.length; i++) {
           console.log(i, cur, nums[i] + i, next);
           next = Math.max(nums[i] + i, next);  // 更新下一步覆盖最远距离
           if (i === cur) {  // 更新下一步覆盖最远距离下标
               if (cur !== nums.length - 1) {  // 如果当前覆盖最远距离下标不是终点
                   res++;  // 走下一步
                   cur = next;  // 更新当前覆盖最远距离下标
                   if (next >= nums.length - 1) break;
               } else break;
           }
       }
       return res;
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值