Leetcode刷题ing


一、注意事项

  1. 求数组的子数组时可以利用滑动窗口进行处理
  2. 滑动窗口:不断调节子序列的起始位置和终止位置,从而得出想要的结果
  3. 在利用滑动窗口实现时一定要弄清楚:首先窗口内是什么;其次如何移动窗口的起始位置;最后如何移动窗口的结束位置
  4. 窗口就是题目所要求的条件

二、刷题

1. 209_长度最小的子数组

  • 方法一:滑动窗口法【本题中利用了 Number 对象中的属性 MAX_VALUE
    var minSubArrayLen = function(target, nums) {
        var l = 0;  //滑动窗口的起始位置
        var sum = 0;
        var subLen = 0;    //滑动窗口的长度
        var result = Number.MAX_VALUE;
        for (var r = 0; r < nums.length; r++) {
            sum += nums[r];
            while(sum >= target) {
                subLen = r - l + 1;
                result = result < subLen ? result : subLen;
                sum -= nums[l++];
            }
        }
        return result !== Number.MAX_VALUE ? result : 0;
    };
    
  • 方法二:暴力解法【双重 for 循环,外层循环控制起始位置,内层循环控制当前起始位置满足条件的终点位置】
    var minSubArrayLen = function(target, nums) {
        var subLen = 0;
        var result = Number.MAX_VALUE;
        for (var i = 0; i < nums.length; i++) {
            var sum = 0;
            for (var j = i; j < nums.length; j++) {
                sum += nums[j];
                if (sum >= target) {
                    subLen = j - i + 1;
                    result = result < subLen ? result : subLen;
                    break;
                }
            }
        }
        return result === Number.MAX_VALUE ? 0 : result;
    };
    

2. 904_水果成篮

  • 方法一:滑动窗口【利用temp指向 篮子2 装的第一个果子,这样可以方便 篮子1 要变化时可以靠temp进行更改】
    var totalFruit = function(fruits) {
        if (fruits.length < 3) {
            return fruits.length;
        }
        var l1 = l2 = temp = 0;
        var result = Number.MIN_VALUE;
        for (var i = 1; i < fruits.length; i++) {
            if (fruits[i] != fruits[l1] && fruits[i] != fruits[l2]) {
                if (fruits[l1] != fruits[l2]) {
                    l1 = temp;
                }
                l2 = i;
            }
            result = Math.max(result, i - l1 + 1);
            if (fruits[temp] != fruits[i]) {
                temp = i;
            }
        }
        return result;
    };
    

    《代码随想录》还有第76题最小覆盖字串也是滑动窗口的推荐题目,但是好难呀我还需要再理解理解然后解决这道题~


总结

每天学习一点点,快乐就会多一点
以上就是今天 数组篇之滑动窗口 刷题记,小梁加油哦!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值