1. 程式人生 > >【LeetCode】209. 長度最小的子陣列

【LeetCode】209. 長度最小的子陣列

題目連結https://leetcode-cn.com/problems/minimum-size-subarray-sum/description/

題目描述

給定一個含有 n 個正整數的陣列和一個正整數 s ,找出該陣列中滿足其和 ≥ s 的長度最小的連續子陣列。如果不存在符合條件的連續子陣列,返回 0。

示例

輸入: s = 7, nums = [2,3,1,2,4,3]
輸出: 2
解釋: 子陣列 [4,3] 是該條件下的長度最小的連續子陣列。

解決方法

兩種方法:一暴力列舉,二用雙指標

class Solution {
public:
    int minSubArrayLen
(int s, vector<int>& nums) { //方法1:暴力列舉,時間複雜度O(n^2)。略 //方法2:雙指標,動態滑窗解決 if (nums.size()==0) return 0;//特殊情況 int left=0,right=0;//視窗起止位置 int result=INT_MAX; int curSum=0;//當前視窗的和 while(left<nums.size()){ if (curSum<
s){//(1)當前視窗的和沒有達到s,則視窗向右滑一格 curSum+=nums[right]; right++; } if (curSum>=s){//(2)當前視窗的和達到了s,則視窗向左收縮一格 result=min(result,right-left); curSum-=nums[left]; left++; } if
(curSum<s && right>=nums.size()) break; //(3)退出迴圈 } return (result==INT_MAX)?0:result; } };