leetcode209:长度最小的子数组

题目链接:209. 长度最小的子数组 - 力扣(LeetCode)

复制代码
class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int n = nums.size();
        if(n == 0)  return 0;
        int end = 0, start = 0, sum = 0, ans = 0x3f3f3f3f;
        while(end < n)
        {
            sum += nums[end];
            while(sum >= target)
            {
                ans = min(ans, end - start + 1);
                sum -= nums[start];
                start++;
            }
            end++;
        }
        return ans == 0x3f3f3f3f ? 0 : ans;
    }
};

这个题目学会了一个新的知识点,《滑动窗口》简单来说一下这个知识点。

滑动窗口:其实·就是在一个数组上定义两个指针,来给出判断条件,推动指针的移动。

就拿力扣上官方的ppt来演示

以下的12张ppt是来演示这个题目的过程

这个ppt是不断更新ans的值,刚开始要设定ans的值是INT_MAX,实际上0x3f3f3f3f是一样的,我这里解释说一下,为什么是while(sum >= target)而不是if(sum >= target) 因为你end指向后面的时候,这个数大于当前的target了,假设说end只想最后一个数是9,这时候大于target了,要让start++,前面的一个数或者两个数,或者三个数加起来都是小于9的话,那这时候是不是不能用if了,因为if只能判断一次,而while是循环,能让start往前走走走,走到sum <= target为止。

再讲一下,要是最后的结果是必须要用仅且一个if和else的条件的话,我建议还是用三目运算符。

条件 ?条件真结果1 :条件假结果2

相关推荐
原凉是这样的丶10 分钟前
Qwen3.8-27B 开源后,我用双 RTX 4090 跑通了:vLLM 0.27.1、128K 上下文与 MTP 实测
linux·算法
码农大叔的博客37 分钟前
golang示例:for九九乘法表
开发语言·算法·golang
手写码匠1 小时前
华为云Flexus+DeepSeek征文|Dify 多 Agent 故障演练实战:用混沌工程主动“搞破坏“,让智能体系统越炸越稳
人工智能·深度学习·算法·aigc
叠层归一研究院1 小时前
如何用程序搭建一个 AGI 种子系统(三):生长如何对接物理与数学宇宙
人工智能·python·算法·机器学习·transformer·agi
show4332 小时前
2026小程序端AI智能优化技术实践:转文字后自动纠错+润色+分段算法分析
人工智能·算法·小程序
平生不晚2 小时前
在 SVG 体系里画一条任意的线
前端·算法
evans在进步2 小时前
LeetCode 198:打家劫舍——Java 动态规划详解
java·leetcode·动态规划
逆境不可逃3 小时前
LeetCode 双题:415. 字符串相加与 143. 重排链表
算法
2601_950760793 小时前
TNF-α:自身免疫疾病治疗的核心靶点与信号通路解析
人工智能·算法·蛋白
不会代码的小猴3 小时前
2. 了解Qt
开发语言·c++·笔记·qt·算法