给你n个非负整数a1,a2,....,an,每个数代表坐标中的一个点(i,ai),在左边内画
n条垂直线,垂直线i的两个端点分别为(i,ai)和(i,0),找出其中的两条线,使得他们与x轴共同构成的容器可以容纳最多的水。
注意:
你不能倾斜容器,且n的值至少为2;
图中垂直线代表输入数组[1,8,6,2,5,4,3,7]。在此情况下,容器能够容纳水
(表示为蓝色部分)的最大值为49。
示例:
输入:[1,8,6,2,5,4,3,7]
输出:49
解题思路:
双指针法,定义两个指针L和R,分别指向数组的两端,具体步骤:
(1)若height[L]<height[R],则L++;
(2)若height[L]>=height[R],则R--;
Go语言实现
package main
import "fmt"
func Min(a ,b int) int{
if a>b{
return b
}else{
return a
}
}
func Max(a ,b int) int{
if a>b{
return a
}else{
return b
}
}
func maxArea(nums []int ) int{
i:=0
Area:=0
j:= len(nums)-1
for{
temp:=(j-i)*Min(nums[i],nums[j])
Area=Max(temp,Area)
if nums[i]>nums[j]{
j--
}else{
i++
}
if i>=j{
break
}
}
return Area
}
func main(){
fmt.Println("11题:盛最多水的容器")
nums:=[]int{1,8,6,2,5,4,8,3,7}
fmt.Println("盛最多水的容器:",maxArea(nums))
}