leetcode做题笔记 209长度最小的子数组 python

给定一个含有 n 个正整数的数组和一个正整数 target 。

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

思路一:

用左右两个指针滑动,先固定左指针移动右指针,每次移动右指针sum加上右指针所在的值,当sum >= target 记下此时数组长度为 右指针索引 - 左指针索引 + 1 , 此时再向后移动右指针数组长度必然大于当前长度,故移动左指针进行下一组判断。

  • 初始result值设置为 len(nums)+1,因为符合条件的子数组长度一定小于等于原数组长度,初始设置超出范围的值以便后面比较取最小值
class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:
        l = r = 0  
        n = len(nums)
        result = n + 1
        sum = 0 
        while r < n :
            sum += nums[r]            
            while sum >= target:
                result = min(result, r - l + 1)
                sum -= nums[l]
                l += 1
            r += 1
        return result if result != n+1 else 0 

思路二:

暴力美学

class Solution:
    def minSubArrayLen(self, target: int, nums: List[int]) -> int:

         lens = len(nums)        
         sublen = 0 
         result = lens + 1
         for i in range(lens):
             sum = 0
             for j in range(i,lens):
                 sum = sum + nums[j] 
                 if sum >= target:
                     sublen = j - i + 1
                     result = min(result,sublen)
                     break
         return 0 if result == lens + 1 else result

你可能感兴趣的:(学习笔记,python)