209. 长度最小的子数组

题目:

给定一个含有 n 个正整数的数组和一个正整数 target

找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0 。

代码:

方法一:滑动窗口 + sum 数组

cpp 复制代码
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int len = nums.size();
        bool flag = false;
        int ans = len;

        for (int i = 0, s = 0; i < len;
             i++) { // 判断从[0, i] 是否满足大于等于 target
            s += nums[i];
            if (s >= target) {
                flag = true;
                ans = i + 1;
                break;
            }
        }
        if (!flag)
            return 0; // 整个数组元素之和无法满足

        vector<long long> sum(len, 0);
        sum[0] = nums[0];
        for (int i = 1; i < len; i++) { // 计算 sum 数组
            sum[i] = sum[i - 1] + nums[i];
        }

        int tmp = ans; // 记录当前合法区间的终点 [0, ans-1]
        for (int i = 0; i < tmp; i++) { // 减少前面的冗余部分 [tmp-ans ,tmp-1]
            if (sum[tmp - 1] - sum[i] >= target)
                ans--;
        }

        for (int i = ans; i < len; i++) { // 逐步扩展后面的元素
            bool f = false;
            while (sum[i] - sum[i - ans] >= target) { // 扩展后逐步减少前面的冗余元素
                ans--;
                f = true;
            }
            if (f) // 补足
                ans++;
        }
        return ans;
    }
};
相关推荐
anlogic4 分钟前
Java基础 9.10
java·开发语言·算法
薛定谔的算法7 分钟前
JavaScript单链表实现详解:从基础到实践
数据结构·算法·leetcode
CoovallyAIHub16 分钟前
CostFilter-AD:用“匹配代价过滤”刷新工业质检异常检测新高度! (附论文和源码)
深度学习·算法·计算机视觉
幻奏岚音17 分钟前
《数据库系统概论》第一章 初识数据库
数据库·算法·oracle
你好,我叫C小白17 分钟前
贪心算法(最优装载问题)
算法·贪心算法·最优装载问题
CoovallyAIHub24 分钟前
CVPR 2025 | 频率动态卷积(FDConv):以固定参数预算实现频率域自适应,显著提升视觉任务性能
深度学习·算法·计算机视觉
mit6.82428 分钟前
[rStar] 解决方案节点 | `BaseNode` | `MCTSNode`
人工智能·python·算法
on_pluto_1 小时前
Leecode hot100 - 448. 找到所有数组中消失的数字
数据结构
zl_dfq1 小时前
数据结构 之 【布隆过滤器 的简介】
数据结构
晴空闲雲2 小时前
数据结构与算法-树和二叉树-二叉树的存储结构(Binary Tree)
数据结构·算法