leetcode--209--長度最小的子數(shù)組

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

示例:

輸入:s = 7, nums = [2,3,1,2,4,3]
輸出:2
解釋:子數(shù)組 [4,3] 是該條件下的長度最小的子數(shù)組。

進階:

如果你已經(jīng)完成了 O(n) 時間復(fù)雜度的解法, 請嘗試 O(n log n) 時間復(fù)雜度的解法。

鏈接:https://leetcode-cn.com/problems/minimum-size-subarray-sum

思路:
1、采用滑動窗口的做法,一個左指針,一個右指針。
2、滑動遍歷整個數(shù)組,記錄目前的數(shù)組和,如果和大于s,則將其減去初始位置的值

Python代碼:

class Solution(object):
    def minSubArrayLen(self, s, nums):
        """
        :type s: int
        :type nums: List[int]
        :rtype: int
        """
        i = 0
        sum = 0
        length = 0

        for j in range(len(nums)):
            sum += nums[j]
            while sum>=s:
                if length==0:
                    length = j-i+1
                else:
                    length = min(length, j-i+1)
                sum -= nums[i]
                i += 1
        return length

C++代碼:

class Solution {
public:
    int minSubArrayLen(int s, vector<int>& nums) {
        int left=0;
        int sum=0;
        int ret=0;

        for (int right=0; right<nums.size(); right++){
            sum += nums[right];
            while(sum>=s){
                if(ret==0){
                    ret = right-left+1;
                }else{
                    ret = min(ret, right-left+1);
                }
                sum -= nums[left];
                left += 1;
            }
        }
        return ret;
    }
};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容