力扣-209.长度最小的子数组

张开发
2026/6/9 0:05:35 15 分钟阅读
力扣-209.长度最小的子数组
题目链接209. 长度最小的子数组给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其总和大于等于target的长度最小的子数组[numsl, numsl1, ..., numsr-1, numsr]并返回其长度。如果不存在符合条件的子数组返回0。示例 1输入target 7, nums [2,3,1,2,4,3]输出2解释子数组[4,3]是该条件下的长度最小的子数组。示例 2输入target 4, nums [1,4,4]输出1示例 3输入target 11, nums [1,1,1,1,1,1,1,1]输出0提示1 target 1091 nums.length 1051 nums[i] 104进阶如果你已经实现O(n)时间复杂度的解法, 请尝试设计一个O(n log(n))时间复杂度的解法。滑动窗口法j 相当于尾指针向后遍历并且把所有数加起来。i 为头指针当 sumtarget 时可以得到当前子数组长度而此时 j 无需变动让 i 向后遍历并且不是if而是while避免target10而数组为11110的状况即为了得到最短的子数组。需要注意我们需要的结果一开始要设为最大的数而INT32_MAX即int类型里的最大的数。class Solution { public: int minSubArrayLen(int target, vectorint nums) { int resultINT32_MAX; int sum0; int subL0; int i0; for(int j0;jnums.size();j){ sumnums[j]; while(sumtarget){ subLj-i1; resultsubLresult?subL:result; sum-nums[i]; } } return resultINT32_MAX?0:result; } };

更多文章