Go语言力扣刷题-盛最多水的容器|Go主题月
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/container-with-most-water
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
明白题目搞了半天~~
转换为大白话:给n个长度分别为a1, a2, …, an的线段,一端与x轴对齐,依次排开,求与其中两条线段与x轴组成的矩形的最大面积。
笨方法,也是第一直觉,两两求最大值,两个for循环。
进阶:官方名称叫,双指针。即左侧1个指针与右侧1个指针逐步想中间移动,每次移动计算最大面积。也很好理解,和生活直觉也一致。
经过了第10题的洗刷,这题通过测试用例后1次通过,开森^_^
涉及到Go语言知识主要包括:数组操作,数组求长度。
1 | a := []int{1,2,3} // 定义初始化, a的类型为[]int |
需要注意的两个点是:
- Go语言没有
while
循环, 使用for ;循环条件; {}
来实现。 - Go语言中没有三目运算符
condition? true-valu1: false-value2
,因此需要另外定义max
函数
实现代码如下:
1 | func maxArea(height []int) int { |
新学到Go中有三个点的用法,补充在下面:
可变参数函数:
即允许传递不定长个相同类型的参数。
1 | func myfunc(vals ...int) { |
调用可变参数函数
通过三个点可将数组,切片等转换为可变参数形式调用。
1 | myfunc(9, 8) |
经过测试发现,在可变参数函数中,获取到可变函数的类型为[]Type。
1 | package main |