209.最小のサブアレイ
トピックリンク
出典:LeetCode
リンク:https://leetcode-cn.com/problems/minimum-size-subarray-sum/
タイトル説明
n個の正の整数と正の整数sを含む配列が与えられた場合、その合計≥sを満たす最小の長さの連続サブ配列を見つけて、その長さを返します。条件を満たすサブ配列がない場合は、0が返されます。
例:
入力:s = 7、nums = [2,3,1,2,4,3]
出力:2
説明:サブ配列[4,3]は、この条件下で長さが最小のサブ配列です。
トピック分析
ブルートフォースまたはスライディングウィンドウ
このコードはスライディングウィンドウを使用します
tmpは、現在の連続配列の合計の最大値を計算します
countは現在の修飾値です
resは最終結果を保存します。res= n +1の場合、条件が満たされていないものと見なされ、0が返されます。
class Solution {
public:
int minSubArrayLen(int target, vector<int>& nums) {
//双指针法
int n = nums.size();
int i = 0, j = 0;
int tmp = 0;
int count = 0;
int res = n + 1;//如果最后res 仍是n+1 没有符合条件的 返回0
while(j<n){
tmp += nums[j];
j++;
while(tmp >= target){
res = min(res, j - i);
tmp -= nums[i];
i++;
}
}
return res == n + 1 ? 0 : res;
}
};