今天是十一过后,实验室项目忙到忘记自我。已经很久没碰算法题了,开始刷中等题了,感受一下被难度支配的恐惧~~~


1.盛最多水的容器(11)
LeetCode数组专栏(中等:1-20)
LeetCode数组专栏(中等:1-20)
  看到这道题,有点尴尬。。。这道题是我当初面试机器学习岗位时候,一家公司面试题中的一道算法题。。我当时是没做出来~~~尴尬。
  这道题我的思路是先循环height,找到最长的高度和次长的高度,计算出他们之间的容水量,然后基于此,向外扩展,一点一点比较,每次更新最高容水量,一直到边界为止。(PS:暴力法这里就不说了,肯定超时)
  但是貌似我这种方法是行不通的,看了答案,使用双指针的方法。具体步骤就是在数组头和尾各安插一个指针。因为我们要想让中间的容水量最大, 需要保证两个“挡板”足够远,并且两个挡板足够长(一根长也不行,因为容水量受限于低的那一根)。所以每次往中间移动(将较短的那一侧往较长的那一侧移动)。
LeetCode数组专栏(中等:1-20)
PS:这道题只要牢记一件事:使得面积增加只可能是木板的高度增加或者两块木板的距离增加;那么我们控制距离减小的情况下,只有让木板的高度增加,才能保证更新过程中面积有增加的可能。 所以在向内移动的过程中,我们不动较高的那块木板,而一直更新较低的那块木板。


相关文章: