Leetcode 209 Minimum Size Subarray Sum

本文深入探讨了两指针算法的应用技巧,通过具体题目解析如何定位及移动指针,实现子数组长度的优化。文章提供了详细的实现思路和代码示例,帮助读者掌握两指针算法的变种应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


思路: 这道题我没做出来,这其实是不应该的,其实一看就知道是two pointer。这几天反反复复做了这么多two pointer这题还没做出来是不应该的。主要没做出来的原因就是不知道two pointer怎么定位,以及two pointer怎么根据情况来移动。下面简单说一下这题用two pointer实现的思路,其实这个思路之前就碰到过了。简单来说,这题不是求最短吗,那我们先找到一个符合条件的,然后再一步步缩短(优化)。缩短到不符合条件了,基于此时的two pointer位置,再去寻找最近的能符合条件的,然后再缩短优化,以此类推。这边两个pointer left 和 i(初始化都为0,i用来遍历数组)。left 用在找到一个符合条件的,然后要缩短优化的时候(left++)。i用在去找新的符合条件的时候,一开始的时候i从0开始遍历,找到一个符合条件的,此时固定i,这时开始缩短优化(右移left)。缩短到不符合条件了,这时候我们就要找新的符合条件的,这时候固定left,右移i,寻找新的符合条件的。找到新的了之后再进行和前面一样的操作,缩短优化。以此类推。其实left就相当于subarray的左起点,i就相当于右起点。下面给出代码:

class Solution {
    public int minSubArrayLen(int s, int[] nums) {
        int sum = 0, res = Integer.MAX_VALUE, left = 0;
        for(int i = 0; i < nums.length; i++){
            sum += nums[i];
            while(sum >= s){
                res = Math.min(res, i - left + 1);
                sum -= nums[left++];
            }
        }
        return (res != Integer.MAX_VALUE) ? res : 0;
    }
}

总结:

  1. two pointer的变种有很多,要灵活运用,多总结,多归纳。
  2. 常见时间复杂度排行:在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值