1.題目
給定一個含有?n
?個正整數的數組和一個正整數?target
?。
找出該數組中滿足其總和大于等于?target
?的長度最小的?子數組?[numsl, numsl+1, ..., 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
2.算法
本題我們為了降低時間復雜度采用滑動窗口解決,分為三步:
1.left=0;right=0.
2.進入窗口。->利用long long sun變量來統計left和right之間所有數字之和。
3.判斷結果出窗口。
3.代碼書寫
class Solution {
public:int minSubArrayLen(int target, vector<int>& nums) {int left = 0;int right = 0;long long int sum = nums[right];int len = 99999999;while (right < nums.size()){if (sum < target){right++;if(right<nums.size())sum = sum + nums[right];}if (sum >= target){if (len > right - left + 1)len = right - left + 1;sum = sum - nums[left];left++;}}if (len == 99999999)return 0;return len;}
};