題目:長度最小的子數(shù)組
給定一個含有 n 個正整數(shù)的數(shù)組和一個正整數(shù) s 媳叨,找出該數(shù)組中滿足其和 ≥ s 的長度最小的連續(xù)子數(shù)組腥光,并返回其長度。如果不存在符合條件的連續(xù)子數(shù)組糊秆,返回 0。
示例1:
輸入:s = 7, nums = [2,3,1,2,4,3]
輸出:2
解釋:子數(shù)組 [4,3] 是該條件下的長度最小的連續(xù)子數(shù)組议双。
思路
- 一般對于子數(shù)組問題都采用前綴和或者滑動窗口痘番。
- 這里采用滑動窗口,不斷擴大窗口直到
sum
滿足條件平痰。記錄下最小連續(xù)汞舱,然后減小窗口,重復判斷sum
是否滿足條件宗雇,更新ans
昂芜。直達達到結尾。
實現(xiàn)
func minSubArrayLen(s int, nums []int) int {
l := len(nums)
if l == 0 {
return 0
}
var (
ans = math.MaxInt32
left, right, sum int
)
for right < l {
sum += nums[right]
for sum >= s {
if diff := right - left + 1; diff < ans {
if ans = diff; ans == 1 {
break
}
}
sum -= nums[left]
left++
}
right++
}
if math.MaxInt32 == ans {
return 0
}
return ans
}