leetcode刷題——209. 長度最小的子陣列
阿新 • • 發佈:2021-01-12
給定一個含有 n 個正整數的陣列和一個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的 連續 子陣列,並返回其長度。如果不存在符合條件的子陣列,返回 0。
示例:
輸入:s = 7, nums = [2,3,1,2,4,3]
輸出:2
解釋:子陣列 [4,3] 是該條件下的長度最小的子陣列。
進階:
如果你已經完成了 O(n) 時間複雜度的解法, 請嘗試 O(n log n) 時間複雜度的解法。
通過次數106,550提交次數238,357
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/minimum-size-subarray-sum
解題思路
暴力,計算所有子序列,然後從子序列中選長度最小的
程式碼
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int resultList=INT32_MAX;
int i=0;
int lengthList=0;
int sum=0;
for(int j=0;j<nums.size();j++)
{
sum+ =nums[j];
while(sum>=s)
{
lengthList=(j-i+1);
resultList=resultList > lengthList ? lengthList : resultList;
sum-=nums[i++];
}
}
return resultList == INT32_MAX ? 0 : resultList;
}
};
解題思路
滑動視窗,雙指標經典問題
程式碼
class Solution {
public:
int minSubArrayLen(int s, vector<int>& nums) {
int resultList=65535;
int lengthList=0;
for(int i=0;i<nums.size();i++)
{
int sum=0;
for(int j=i;j<nums.size();j++)
{
sum+=nums[j];
if(sum>=s)
{
lengthList=j-i+1;
resultList = resultList < lengthList ? resultList : lengthList;
break;
}
}
}
return resultList == 65535 ? 0 : resultList;
}
};