傳送門:長度最小的子數組
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;}
};