2021-03-23:給定一個正整數組成的無序數組arr,給定一個正整數值K,找到arr的全部子數組裏,哪一個子數組的累加和等於K而且是長度最大的。返回其長度。

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
    }
}

執行結果以下:數組

在這裏插入圖片描述


左神java代碼
評論url

相關文章
相關標籤/搜索