传送门:长度最小的子数组
Problem/题意
给定一个整数数组和一个整数 target
,要求算出数组中最小长度的连续子数组,数组元素的和大于等于 target
。
Thought/思路
题目要求维护最小的长度,因此我们希望:当条件不满足时,不断扩大子数组长度;当条件满足(sum >= target
)时,就可以尝试缩短子数组长度,并进行一次答案的维护。这显然是一个双指针的解法。
Code/代码
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int ans = 1e9, now = 0;for (int l = 0, r = -1; l < nums.size(); ++ l) {while (now < target && r + 1 < nums.size()) {now += nums[++ r]; // 扩大子数组长度}if (now >= target) {ans = std::min(ans, r - l + 1);}now -= nums[l]; // 缩短子数组长度}return ans == 1e9 ? 0 : ans;}
};