首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >滑动窗口-209.长度最小的数组-力扣(LeetCode)

滑动窗口-209.长度最小的数组-力扣(LeetCode)

作者头像
白天的黑夜
发布2025-10-22 15:47:10
发布2025-10-22 15:47:10
1040
举报

一、题目解析

二、算法原理

解法1:暴力枚举出所有的子数组的和0(n^2)

这里有两个点要注意,第一,我们可以观察到当sum>=target时,继续枚举是没有意义的,因为我们要找的是最短子数组,所以我们只需要枚举到right第一次满足条件时,就可以移动left了。

第二点呢,我们在数组的遍历中需要维护好sum的值,当left移动过后,新的sum没必要在次遍历求和,只需要在之前的基础上减去之前left指向的值即可。

解法2:利用上面第一点的发现,我们可以使用“滑动窗口”也叫“同向双指针”优化暴力枚举

我们需要初始化几个变量,left(左区间),right(右区间),sum(元素求和),len(元素长度)

通过进窗口,判断,出窗口,更新结果(更新的位置顺序由对应的题目来决定,本题更新结果在判断过后就要进行)

时间复杂也很好分析,(right遍历)n+(left遍历)n = o(n)

这里可以根据思路来自己实现一下,链接: 209. 长度最小的子数组 - 力扣(LeetCode)

三、代码实现

这里的len赋值INT_MAX目的是为用于fmin中选出最小的len ,fmin用于两个浮点数选出小的那一个,而最后的三目操作符意思为当len的值为INT_MAX时,返回0,否则返回len。因为当len为INT_MAX时可以认为不存在最短数组小于等于tagent,所以这里要对len的值进行判断。

如果能帮到您能否留下一个免费的赞,这对我很有帮助,我们下期再见!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档