当前位置: 首页> 教育> 大学 > 209. 长度最小的子数组

209. 长度最小的子数组

时间:2025/8/21 22:56:28来源:https://blog.csdn.net/qq_43545471/article/details/141474538 浏览次数:0次

题目:

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

代码:

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

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] 是否满足大于等于 targets += 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;}
};
关键字:209. 长度最小的子数组

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: