leetcode11 盛水最多的容器

题目

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i])
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。

示例

输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

解析

这道题用双指针!!
主要还是得理解了题意才行,要求的是最大容器,其实也就是最大的面积,那求面积的话,其实就是宽乘以高,宽就是双指针下标之间的距离;高就是双指针中高度较小的那个,理解了这个后,这道题目就不难了。

func maxArea(height []int) int {
	left := 0
	right := len(height) - 1
	res := 0

	for left < right {
		tmp := (right - left) * min(height[left], height[right])
		res = max(res, tmp)
		if height[left] < height[right] {
			left++
		} else {
			right--
		}
	}
	return res
}

func max[T int](a, b T) T {
	if a > b {
		return a
	}
	return b
}

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

这里可以注意下,如果用的是go 1.21后面的版本,就不需要自己定义max和min了,只用用就行

你可能感兴趣的:(#,leetcode数组系列,#,leetcode贪心系列,数据结构,算法,双指针)