容器盛水问题

容器盛水问题

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
    }
}
全部评论

相关推荐

10-07 20:48
门头沟学院 Java
听说改名就会有offer:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务