LeetCode 209. 长度最小的子数组

2022-08-02  本文已影响0人  草莓桃子酪酪
题目

给定一个含有 n 个正整数的数组和一个正整数 target。
找出该数组中满足其和 ≥ target 的长度最小的连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度。如果不存在符合条件的子数组,返回 0。

方法一

分别计算每一种方式的子数组长度,最终将最小的输出。

class Solution(object):
    def minSubArrayLen(self, target, nums):
        old = 0
        for j in range(len(nums)):
            i = j
            result = 0
            new = 0
            while result < target and i < len(nums):
                result = result + nums[i]
                if result < target:
                    i = i + 1
                else:
                    new = i - j + 1
            if old == 0 or old > new and new != 0:
                old = new
        return old

会显示超出时间限制

方法二:滑动窗口
class Solution(object):
    def minSubArrayLen(self, target, nums):
        start = end = 0
        total = 0
        ans = len(nums) + 1
        while end < len(nums):
            total = total + nums[end]
            while total >= target:
                ans = min(ans, end - start + 1)
                total = total - nums[start]
                start = start + 1
            end = end + 1
        if ans == len(nums) + 1:
            return 0
        else:
            return ans
上一篇下一篇

猜你喜欢

热点阅读