// 滑动窗口 时间复杂度O(N)
func minSubArrayLen(s int, nums []int) int {
n := len(nums)
// l,r为左右边界指针
l, r := 0, 0
// 窗口的和
sum := 0
// 返回结果
res := math.MaxInt64
for r < n {
// 将右边界加入窗口中
rNum := nums[r]
sum += rNum
r++
// 如果现在的和满足条件
for sum >= s {
// 更新结果
res = getMin(res, r-l)
sum -= nums[l]
l++
}
}
// 如果res没有更新过代表没有满足条件的结果
if res == math.MaxInt64 {
res = 0
}
return res
}
func getMin(a, b int) int {
if a < b {
return a
}
return b
}
相关文章
- 11-191877. 数组中最大数对和的最小值
- 11-19计算int数组中的最大,最小,平均值
- 11-19leetcode 215. 数组中的第K个最大元素 实现最小堆 随机partition
- 11-19leetcode 179. Largest Number 、剑指offer33 把数组排成最小的数
- 11-19如何从多个相同长度的列表中获取numpy数组并沿轴排序?
- 11-19POJ - 3190 Stall Reservations 贪心+自定义优先级的优先队列(求含不重叠子序列的多个序列最小值问题)
- 11-19绝对差不超过限制的最长连续子数组( 滑动窗口、multiset / LeetCode)
- 11-19剑指offer六之求旋转数组的最小数字
- 11-19定义一个长度为5的int型数组arr,数组元素为1-5(范围包含1和5)之间的任意随机数,且保证5个数不重复
- 11-19Leetcode-1031 Maximum Sum of Two Non-Overlapping Subarrays(两个非重叠子数组的最大和)