盛最多水的容器——双指针

81 阅读1分钟

image.png

双指针

  1. 创建两个指针(l,r)指向数组的首和尾,
  2. for循环,退出条件(l>r)
  3. 比较l和r的高度,每次移动低的那一个指针
  4. 每次移动完,维护一下最优解
  5. for循环结束,输出最优解
func maxArea(height []int) int {
    l,r := 0,len(height)-1
    ans := (r-l) * min(height[l],height[r])
    for l < r {
        if height[l] < height[r] {
            l++
            if height[l] > height[l-1] {
                if ans < (r-l) * min(height[l],height[r]) {
                    ans = (r-l) * min(height[l],height[r])
                }
            }
        } else{
            r--
            if height[r] > height[r+1] {
                if ans < (r-l) * min(height[l],height[r]) {
                    ans = (r-l) * min(height[l],height[r])
                }
            }
        }

    }
    return ans
}

func min(a,b int) int {
    if a < b {
        return a
    }
    return b
}