2021-03-23:給定一個正整數組成的無序數組arr,給定一個正整數值K,找到arr的全部子數組裏,哪一個子數組的累加和等於K而且是長度最大的。返回其長度。java
福大大 答案2021-03-23:git
雙指針。小於等於K時,右指針右移,窗口和的值累加,等於時收集答案;大於K時,左指針右移,窗口和的值減小。github
代碼用golang編寫,代碼以下:golang
package main import "fmt" func main() { arr := []int{ 1, 2, 3, 0} ret := getMaxLength(arr, 6) fmt.Println(ret) } func getMaxLength(arr []int, K int) int { arrLen := len(arr) if arrLen == 0 { return 0 } ans := 0 left := 0 right := 0 sum := arr[0] for right < arrLen-1 { if sum == K { ans = getMax(ans, right-left+1) right++ sum += arr[right] } else if sum < K { right++ sum += arr[right] } else { sum -= arr[left] left++ } } if sum == K { ans = getMax(ans, right-left+1) } return ans } func getMax(a int, b int) int { if a > b { return a } else { return b } }
執行結果以下:數組