LeetCode每日1题 (*/200):
前言:
- 本模块记录力扣每日一刷的解题过程,以及小结.
内容:
问题描述:
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:
你不能倾斜容器。
注意:
示例:
提示:
提示:
n == height.length
2 <= n <= 105
0 <= height[i] <= 104
解题思路:
1.直接法:直接法很简单遍历每个结果即可。
2.双指针法:不断的缩小范围,当指针相遇时总会得到最优解,在缩小时,不会让结果变得更坏就能够缩小。
实现:
//1.直接法
public int maxArea01(int[] height) {
int capacity=0;
if(height.length==2){
return Math.min(height[0],height[1]);
}else{
for (int i = 0; i < height.length; i++) {
for (int j = i; j < height.length; j++) {
if(capacity<((j-i)*Math.min(height[i],height[j]))){
capacity=(j-i)*Math.min(height[i],height[j]);
}
}
}
return capacity;
}
}
//2.双指针法
public int maxArea02(int[] height) {
int capacity=0;
int f=0;
int b=height.length-1;
while (f < b) {
int area=Math.min(height[f],height[b])*(b-f);
capacity=Math.max(area,capacity);
if (height[f] <= height[b]) {
f++;
} else {
b--;
}
}
return capacity;
}
小结:
活学活用!