You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

滑动窗口求解和≥target的最短子数组:代码复杂度与优化问询

滑动窗口求解最短子数组:复杂度分析与优化建议

复杂度分析

你的代码时间复杂度是O(n),完全达标。滑动窗口算法中,每个元素最多被左右指针各遍历一次,没有嵌套的重复操作,属于该问题的最优时间复杂度。空间复杂度是O(1),仅使用了几个变量,无额外空间开销。

代码优化(重点针对minLength逻辑)

原代码逻辑正确,但minLength的处理可以更严谨、直观:

  • 初始值替换:别用100000000000这种硬编码大数,改用nums.length + 1更合理——因为最短子数组的长度不可能超过数组本身的长度,这个初始值能明确表示“尚未找到有效子数组”的状态。
  • 结果判断逻辑重构:原代码通过left===0判断是否存在有效子数组,虽然能工作,但逻辑不够直接。更准确的方式是:如果最终minLength仍大于数组长度,说明从未找到符合条件的子数组,返回0;否则返回minLength。

优化后的完整代码

var minSubArrayLen = function(target, nums) {
    let minLength = nums.length + 1;
    let left = 0;
    let sum = 0;

    for(let i = 0; i < nums.length; i++) {
        sum += nums[i];

        while(sum >= target) {
            minLength = Math.min(minLength, i - left + 1);
            sum -= nums[left];
            left++;
        }
    }

    return minLength > nums.length ? 0 : minLength;
};

let target = 7;
let nums = [2,3,1,2,4,3];

console.log(minSubArrayLen(target, nums)); // 输出2

测试验证

针对给定测试用例,优化后的代码会正确输出2,对应数组中最短的符合条件的子数组[4,3]。

内容的提问来源于stack exchange,提问作者Alekam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:04:53