2021-05-24:盛最多水的容器。给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个

2021-05-24:盛最多水的容器。给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

福大大 答案2021-05-24:

双指针。左指针最左,符合条件时右移;右指针最右,符合条件时左移。左指针和右指针,谁小谁移动;同样大,移动左指针。时间复杂度O(N),额外空间复杂度O(1)。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {

    arr := []int{1, 8, 6, 2, 5, 4, 8, 3, 7}
    ret := maxArea2(arr)
    fmt.Println(ret)

}

func maxArea2(h []int) int {
    max := 0
    l := 0
    r := len(h) - 1
    for l < r {
        max = getMax(max, getMin(h[l], h[r])*(r-l))
        if h[l] > h[r] {
            r--
        } else {
            l++
        }
    }
    return max
}

func getMax(a int, b int) int {
    if a > b {
        return a
    } else {
        return b
    }
}

func getMin(a int, b int) int {
    if a < b {
        return a
    } else {
        return b
    }
}

执行结果如下:
图片


左神java代码

福大大架构师每日一题 文章被收录于专栏

最新面试题,针对高级开发人员和架构师。内容是后端、大数据和人工智能。

全部评论

相关推荐

03-12 15:35
嘉应学院 Python
快说谢谢牛牛精灵:说不定就是下一个寒武纪!
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务