leetcode 209m 长度最小的子数组
题目描述#
给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的连续子数组,并返回其长度。如果不存在符合条件的连续子数组,返回 0。
示例:
1 | 输入:s = 7, nums = [2,3,1,2,4,3] |
数组元素 和 s均为正整数,即均大于0
算法#
- 定义两个数组下标:i j,遍历数组
- 外层循环i表示子数组的起点下标,内层循环j从位置i开始,逐个累加数组元素,同时计算数组元素个数tmplength,直到累加和大于等于s 或者 j大于等于元素个数numsSize 时停止
- 取得最小的元素个数
当 $i=0,j=numsSize-1,sum<s$ 时,即是:整个数组的和小于s,直接返回0
类似的,
当 $i>0,j=numsSize-1,sum<s$ 时,即是:从i到j的累加和小于s,表示i后面的元素累加和都小于s,不存在符合条件的子数组,直接跳出循环
C代码#
1 |
|
时间复杂度#
算法的时间复杂度为 $O(n)$