"""
给定n个非负整数a1,a2,a3...an,每个数代表坐标中的一个点(i,ai)。画n条垂直线,使得垂直线i的两个端点分别为(i,ai)和(i,0)。找出其中的两条线,
使得他们与x轴共同构成的容器可以容纳最多的水.
"""
import random
def func1(nums):
max_area = 0
# 两层for循环可以解决该问题
# 应该减2,前面写成了减1,虽然也是一样的结果,但减2才是正确的
# 用前面的len(nums)-1个值和后一个值做比较
for m in range(len(nums) - 2):
for n in range(m + 1, len(nums)):
# 水桶嘛,需要的是最小值
max_area = max(max_area, (n - m) * min(nums[m], nums[n]))
return max_area
def func2(nums):
max_area = 0
left = 0
# 需要减1,刚写的时候给忽略这事报错了,比较下标要减一才行
right = len(nums) - 1
# 采用双指针的方式,分别由列表的两头向中间逼近,值较大的那一个指针不动,移动值较小的指针位置
while left < right:
max_area = max(max_area, (right - left) * min(nums[left], nums[right]))
if nums[left] > nums[right]:
right -= 1
else:
left += 1
return max_area
nums = [random.randint(1, 30) for _ in range(10)]
print(nums)
print(func1(nums))
print(func2(nums))
练习题---盛最多水的容器
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 题目 给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n ...
- 这道题可以采用双指针的方法,每次移动有可能会增大面积的那条边,具体的思维方式可以看网站的解答,我这里给出Pytho...
- 写在前面: 程序员分两种,会算法的程序员和不会算法的程序员。几乎没有一个一线互联网公司招聘任何类别的技术人员是不考...