题目

中文

https://leetcode-cn.com/problems/container-with-most-water/
image.png
image.png

英文

题解

第一次

自己思考

暴力枚举方法 从左到右遍历 例如 选择第一个板 之后继续向后保存最大值,然后再第二个板 向后 思考最大值。
时间复杂度O(n^2)
应该也可以双指针 但个人思考操作方式感觉和上面一样。看讲解。

讲解

//一维数组坐标变化 i,j
1.枚举 left bar x, right bar y。(x-y)*height_diff。
image.png
数组代码遍历。

2.左右边界,向中间收敛,左右夹逼方法
首先,比较左右边界长度,短的向里移动。
其次,从两边往里收敛,如果你的高度不如我则不需要考虑(因为此时宽度最大)
则只需要考虑比你高的棒子。
思路类似二分查找。

  1. int maxArea(int *height, int heightSize)
  2. {
  3. int max = 0;
  4. for (int i = 0, j = heightSize - 1; i < j;)
  5. {
  6. int minHeight = height[i] < height[j] ? height[i++] : height[j--];
  7. max =max>=(j-i+1)*minHeight?max:(j-i+1)*minHeight;
  8. }
  9. return max;
  10. }

两个优雅的三元表达式,值得学习。