LeetCode第11题 盛最多水的容器

思考过程:
这道题和两个柱子有关,两个柱子的高度和距离决定了盛水的多少。由于和两个柱子相关,所以想到了双指针的方式。而想要盛水最多,一个方面就是让两个柱子离得尽可能远。所以双指针的起始位置是第一个位置和最后一个位置。那么怎么遍历呢?考虑了距离的远近,还有一个因素是柱子的高度。从柱子的高度看,应该尽量保留高的柱子,所以遍历的规则是较矮的柱子指针向前移动一步。

正确性证明:
上述解题过程并不能自证正确性。为什么按照上述遍历过程就一定会经过正确的解呢?

有一个较容易理解的简易证明是:每次的移动都相当于舍弃了一根柱子。舍弃时,对于这根柱子所能构成的最大解已经被记录下了,所以可以舍弃。而遍历结束后,每根柱子都经历了被舍弃的过程,所以一定经过了最大解。

猜你喜欢

转载自blog.csdn.net/vxzhg/article/details/104545610