贪心算法找最大容器
2020-06-27 本文已影响0人
历十九喵喵喵
给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

思路:找出对期望值贡献最大的数据:从两边缩小寻找最高的直线。
抽象成当容器的长度从两边开始时,宽度一定是最大的,只要不断地往中间缩小,放弃高度比较矮的那个,即移动高度比较小的那个才有可能找到面积最大值。
步骤:
计算最大宽度的原始面积,移动高度较小的一边寻求最大面积,当求得的面积比原始面积大时,替换掉原始面积,结果返回最大面积。