func minSubArrayLen(target int, nums []int) int {
pre := 0
ne := -1
sum := 0
MinCnt := 114514
n := len(nums)
for pre < n && ne < n {
if sum < target {
ne ++
if ne < n {
sum += nums[ne]
}
} else {
MinCnt = min(MinCnt, ne - pre + 1)
sum -= nums[pre]
pre ++
}
}
if MinCnt == 114514 {
return 0
}
return MinCnt
}
func minSubArrayLen(target int, nums []int) int {
n := len(nums)
ans := 114514
pre := make([]int, n + 1)
for i := 1; i <= n; i ++ {
pre[i] = pre[i - 1] + nums[i - 1]
}
for i := 1; i <= n; i ++ {
aim := target + pre[i - 1]
offset := Search(pre, aim)
if offset >= 0 && offset <= n {
ans = min(ans, offset - (i - 1))
}
}
if ans == 114514 {
return 0
}
return ans
}
func Search(nums []int, target int) int {
l, r := 0, len(nums)
for l < r {
mid := (l + r) / 2
if nums[mid] >= target {
r = mid
} else {
l = mid + 1
}
}
return r
}