因为是连续子数组。。 所以滑动窗口。。
我理解的。。 首先左右边界都在0 因为都是正数 所以向右移动和会变大
当和到达要求的时候 求出当前的长度 右边界-左边界 + 1 赋值给ret
然后总和减去左边界的数字 让左指针往右移动 寻找下一个符合条件的左右边界
最后ret存储的就是最短子数组
最后如果没有找到符合条件的话 返回0
func minSubArrayLen(_ target: Int, _ nums: [Int]) -> Int {
var sum = 0
var left = 0
var right = 0
var ret = Int.max
for i in 0..<nums.count {
sum += nums[i]
while sum >= target {
ret = min(ret, right - left + 1)
sum -= nums[left]
left += 1
}
right += 1
}
if ret == Int.max {
return 0
}
return ret
}











网友评论