文章目录
数组是在程序设计中,把具有相同类型的若干元素按有序的形式组织起
来的一种形式。
作为线性表的实现方式之一,数组中的元素在内存中是 连续 存储的,
且每个元素占相同大小的内存。
对于一个数组 [‘apple’, ‘apples’, ‘orange’, ‘banana’,
‘tomatoes’],通过索引和数组第 1 个元素的内存地址,可以计算出
其它元素的内存地址,进而访问内存地址里存储的内容。索引与内存地
址的关系如下图所示。
数组通过 索引 快速访问每个元素的值。在大多数编程语言中,索引从
0 算起。
在不同的编程语言中,数组的实现方式具有一定差别。比如 C++ 和
Java 中,数组中的元素类型必须保持一致,而 Python 中则可以不同。
相比之下,Python 中的数组(称为 list)具有更多的高级功能。
1.最多盛水问题
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个
端点是 (i, 0) 和 (i, arr[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的
水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。
示例 1:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容
器能够容纳水(表示为蓝色部分)的最大值为 49。
示例 2:
输入:arr= [1,1]
输出:1
代码实现(python为例)
def maxArea(arr):
left = 0 # 数组最左边的下标
right = len(arr) - 1 # 右边的下标
max_area = 0 # 面积
while left < right:
if arr[left] > arr[right]:
area = (right - left) * arr[right]
right -= 1
else:
area = (right - left) * arr[left]
left += 1
max_area = area if area > max_area else max_area
return max_area
if __name__ == '__main__':
result = maxArea([1, 8, 6, 2, 5, 4, 8, 3, 7])
print(result)
解题思路:
首先我们是要得到两条垂线之间最多能装多少水,求面积,两根垂线之间水高度只能是短的那一条(不能倾斜的情况下),
所以我们就可以以第一条或者最后一条边作为参照,去和其他边比对,以左边为参照,如果最左的长度大于最右边的长度,得到我们的面积area=(right-left)*arr[right]这里实际就是从最右边开始往左边找,如果左边的垂线比右边的垂线长,则就以右边的垂线为搞,索引(右-左为宽)求出面积,然后右边垂线向左移动,继续求面积,利用下面的三目运算符去进行一个找到所有符合的垂线装的水的面积最大值,并且赋值给max_area,最后return出我们的结果就好了