容器盛水问题
容器盛水问题
http://www.nowcoder.com/questionTerminal/31c1aed01b394f0b8b7734de0324e00f
使用双指针
此题可以理解为水位动态变换
定义左右指针i,j,以及水位标记mark,随着指针的移动,水位标记会改变。也就是说,这题中含有指针的移动规则以及水位mark的改变规则。
指针移动规则:移动水位小的指针,详情见https://leetcode-cn.com/problems/container-with-most-water/solution/sheng-zui-duo-shui-de-rong-qi-by-leetcode-solution/
水位改变规则:当指针移动后,此时移动后的指针所指水位大于标记水位时,更新标记水位为指针所指水位中较小的。
func maxWater( arr []int ) int64 {
// write code here
sum := 0
i:=0
j:=len(arr)-1
mark := getmin(arr[i],arr[j])
for i<j{
if arr[i] > arr[j]{
j--
if mark > arr[j]{
sum += mark-arr[j]
}else{
mark = getmin(arr[i],arr[j])
}
}else{
i++
if mark >arr[i]{
sum += mark-arr[i]
}else{
mark = getmin(arr[i],arr[j])
}
}
}
return int64(sum)
}
func getmin(a,b int)int{
if a>b{
return b
}else{
return a
}
} 