209.长度最小的子数组

64 阅读1分钟

题目:
给定一个含有 n ****个正整数的数组和一个正整数 target

找出该数组中满足其和 ****≥ target ****的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,并返回其长度 如果不存在符合条件的子数组,返回 0 。
算法:
方法一:双指针

func minSubArrayLen(target int, nums []int) int {
	min := math.MaxInt32
	left, right := 0, 0
	sum := 0
	for ; right < len(nums); right ++ {
		// 一个数就大于target
		// if nums[right] > target {
		// 	return 1
		// }
		sum = sum + nums[right]
		for sum >= target && left <= right{
			if right - left + 1 < min {
				min = right - left + 1
			}
			// left位置右移
			sum = sum - nums[left]
			left ++
		}
	}

	if min == math.MaxInt32 {
		return 0
	}
	return min
}