leetcode 209. minimum-size-subarray-sum 長度最小的子數組 python3

時間:2020-06-26

題目地址:https://leetcode-cn.com/problems/minimum-size-subarray-sum

題目難度:Easy

題目描述:

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

示例: 

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


思路1:暴力破解

代碼段1:超時

class Solution:
    def minSubArrayLen(self, s: int, nums: List[int]) -> int:
        if(len(nums) == 0):return 0
        result, num = 0, float('inf')
        for i in range(0, len(nums)):
            for j in range(i, len(nums)):
                temp = 0
                for k in range(i, j + 1):
                    temp += nums[k]
                if(temp >= s):
                    num = min(num, j - i + 1)
                    break
        return num if num != float('inf') else 0

總結:啊 這種寫起來都費勁,媽呀


思路2:雙指針,滑動窗口

代碼段2:通過

class Solution:
    def minSubArrayLen(self, s: int, nums: List[int]) -> int:
        left, right, temp, result, n = 0, 0, 0, float('inf'), len(nums)
        while(right < n):
            temp += nums[right]
            right += 1
            while(temp >= s):
                result = min(result, right - left)
                temp -= nums[left]
                left += 1
        return 0 if result == float('inf') else result

總結:啊 這種寫起來都費勁,媽呀


後續優化:嘗試O(n log n) 二分法

https://leetcode-cn.com/problems/minimum-size-subarray-sum/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-by-43/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章