1 solutions
-
0
思路
快慢指针的方法+贪心的思路
解题过程
容器装的水多意味着就是要宽和高都要尽可能大,所以要选择一个出发点: 宽用横坐标之差来表示,高则用两个height[]中小的一个表示。显然,宽是容易计算的,所以选择宽为出发点; 设slow为0,fast为height.length - 1,这就保证宽是最大的,然后计算当前的面积; 如果当前面积大于max,则max设置为当前面积; 站在贪心的角度,我就认为容器的两条边中,短边就是影响容量的一条边,所以接下来找height[slow] 和height[fast]中的小的那个; 然后移动快慢指针,继续计算容器容量,直到slow = fast 为止。
复杂度
时间复杂度: O(∗) 空间复杂度: O(∗)
int maxArea(int[] height) { int max = 0; int slow = 0; int fast = height.length - 1; while(slow != fast){ int area = (fast - slow) * min(height[slow], height[fast]); if(area > max){ max = area; } if(height[slow] < height[fast]){ slow ++; } else { fast --; } } return max; }
Information
- ID
- 21
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 6
- Tags
- # Submissions
- 6
- Accepted
- 2
- Uploaded By