LeetCode算法 —— 盛最多水的容器(双指针原理详解)
作者:浪子花梦,一个有趣的程序员 ~
这个题目比较简单,因为以前做过相关的题目,写好了之后看了一下官方的答案,发现都差不多,此文来讲解这个双指针原理,没看官方的解释 ~
题目:
给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器,且 n 的值至少为 2。
示例:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
双指针原理详解
首先,我们看到这种题目一般的思想都是找出所有的可能性,在这个思想的基础上我们在加上双指针原理,那么这个思想就是一个很好的思路了,下面我们来详细的来解释一下 . . .
首先,这个一开始的情况,我们找到开头与结尾的那个下标索引:
原理解析:
所以,反反复复的执行同一个操作,当 left 与 right相等时,也就是寻找结束的时候,答案也就出来了,代码比较少,如下所示:
所以,我们最大的值求出的时候如下所示:
水容量 Max = 7 * 7 = 49