题目
中文
https://leetcode-cn.com/problems/container-with-most-water/
英文
题解
第一次
自己思考
暴力枚举方法 从左到右遍历 例如 选择第一个板 之后继续向后保存最大值,然后再第二个板 向后 思考最大值。
时间复杂度O(n^2)
应该也可以双指针 但个人思考操作方式感觉和上面一样。看讲解。
讲解
//一维数组坐标变化 i,j
1.枚举 left bar x, right bar y。(x-y)*height_diff。
数组代码遍历。
2.左右边界,向中间收敛,左右夹逼方法:
首先,比较左右边界长度,短的向里移动。
其次,从两边往里收敛,如果你的高度不如我则不需要考虑(因为此时宽度最大)
则只需要考虑比你高的棒子。
思路类似二分查找。
int maxArea(int *height, int heightSize)
{
int max = 0;
for (int i = 0, j = heightSize - 1; i < j;)
{
int minHeight = height[i] < height[j] ? height[i++] : height[j--];
max =max>=(j-i+1)*minHeight?max:(j-i+1)*minHeight;
}
return max;
}
两个优雅的三元表达式,值得学习。