题目链接:
https://leetcode.cn/problems/container-with-most-water/

package leetcode

func maxArea(height []int) int {
	max, start, end := 0, 0, len(height)-1
	for start < end {
		width := end - start
		high := 0
		if height[start] < height[end] {
			high = height[start]
			start++
		} else {
			high = height[end]
			end--
		}

		temp := width * high
		if temp > max {
			max = temp
		}
	}
	return max
}

为什么当height[start] < height[end],需要将start++,难道不存在一个最优解是以start为左边边界的么?

白话文反证法:当height[start] < height[end],假设存在一个最优解,是以start为左边界,其右边界的索引为i, i<end(因为是从两边向中间移动)

height[i] < height[start] , 根据height[start] < height[end],可以得到height[i] < height[start] < height[end],所以start,end为边界的结果肯定大于start,i的结果。
height[i] > height[start],又因为height[start] < height[end],所以start所在的柱子是最矮的,水最多只能到height[start]的地方,又因为 i < end,所以一定是以end作为右边界的结果比较大。

因此假设不存在,因此height[start] < height[end],需要将start++

关联目标:双指针刷题 1/76