classSolution: defminSubArrayLen(self, target: int, nums: List[int]) -> int: ans = 10 ** 9# 初始化一个无穷大的答案 for i inrange(0,len(nums)): o = 0#子数组的元素和 for j inrange(i,len(nums)): o+=nums[j] # 循环一次加一个 if o >= target: # 判断 ans = min(ans,j-i+1) # 更新答案 注意 这里+1是因为自己也要算进去 if ans == 10**9: return0# 如果没有答案就返回0 return ans
classSolution: defminSubArrayLen(self, target: int, nums: List[int]) -> int: i=0;j=0;ans=10**9;t=0 while j < len(nums): t+=nums[j] # 添加子数组元素 while i <= j and t >= target: ## 保持左右边界不相反 而且 t>=target if t >= target: ans = min(ans,j-i+1) # 更新答案 t-=nums[i] # 删除子数组元素 i+=1 j+=1# 枚举右边界 if ans == 10 ** 9: return0# 如果答案还是无穷大 说明没有符合的子数组 return ans
这样我们就遍历了一次数组解决了问题 可以通过本题了
示例代码
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
# 时间复杂度:O(n) # 空间复杂度:O(1) classSolution: defminSubArrayLen(self, target: int, nums: List[int]) -> int: i=0;j=0;ans=10**9;t=0 while j < len(nums): t+=nums[j] while i <= j and t >= target: if t >= target: ans = min(ans,j-i+1) t-=nums[i] i+=1 j+=1 if ans == 10 ** 9: return0 return ans