力扣地址數組
func minSubArrayLen(s int, nums []int) int { length := len(nums) min := length + 1 for i := 0; i< length; i++{ for j := i; j<length;j++{ if j-i+1 >=min{ break //這一趟已經不必找了 } sum := 0 for k := i;k<=j;k++{ sum += nums[k] } if sum >= s{ min = j-i+1 break //這一趟已經找到,能夠直接返回 } } } //沒有找到知足條件的連續子數組,返回0 if min == length + 1{ return 0 } return min }
func minSubArrayLen(s int, nums []int) int { length := len(nums) min := length + 1 for i := 0; i< length; i++{ sum := nums[i] for j := i; j<length;j++{ if j-i+1 >=min{ break //這一趟已經不必找了 } if j > i{ sum += nums[j] } if sum >= s{ min = j-i+1 break //這一趟已經找到,能夠直接返回 } } } //沒有找到知足條件的連續子數組,返回0 if min == length + 1{ return 0 } return min }
func minSubArrayLen(s int, nums []int) int { //滑動窗口的解法:由於題目是一個連續子數組最小問題,知足滑動窗口類型 length := len(nums) l,r := 0,-1 // nums[l,r] 是咱們的一個滑動窗口,默認是沒有元素 sum := 0 min := length +1 for l < length{ if sum >= s{ //滑動窗口裏面和已經知足要求,就不用繼續向右滑 sum -= nums[l] l++ }else if r+1<length{//能夠容許右滑 r++ sum += nums[r] }else{ break //滑動窗口不能右滑了,找不到,直接返回 } if sum >= s && r-l+1 < min{ min = r-l+1 } } if min == length +1 { return 0 } return min }