[Leetcode Pattern] Two point

Trapping Rain Water 為一個典型的 Two point 問題,

可以用左右兩個 point 分別從頭尾開始往中間移動,並用兩個變量分別記錄左右兩邊的最大值。當左邊的最大值小於等於右邊的最大值時,更新左邊的最大值並計算左邊能接到的水量;反之,更新右邊的最大值並計算右邊能接到的水量。重複此過程直到兩個 point 相遇。最終結果即為所有計算出的水量之和

func trap(_ height: [Int]) -> Int {
    var left = 0
    var right = height.count - 1
    var leftMax = 0
    var rightMax = 0
    var result = 0
    while left < right {
        if height[left] <= height[right] {
            if height[left] >= leftMax {
                leftMax = height[left]
            } else {
                result += leftMax - height[left]
            }
            left += 1
        } else {
            if height[right] >= rightMax {
                rightMax = height[right]
            } else {
                result += rightMax - height[right]
            }
            right -= 1
        }
    }
    return result
}
網頁瀏覽量: 0


尚未有留言,成為第一個留言的人吧!

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *