[leetcode] Container with most water
2015-02-11 06:22
337 查看
Given n non-negative integers a1, a2,
..., an, where each represents a point at coordinate (i, ai). n vertical
lines are drawn such that the two endpoints of line i is at (i, ai) and (i,
0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container.
思路:这道题的tag是two pointer。很明显,是要我们利用左右两个pointer,来寻找最优解。如果要存的水最多,我们需要宽和高都很大,最左指针和最右指针保证宽最大,但是高不一定是最大,左右两个指针,分别向中间遍历,如果遇到更低的数值则跳过,因为这种情况,水会更少(高和宽都降低了),如果遇到了更大的值,则保存下来,计算存水量。
public class Solution {
public int maxArea(int[] height) {
int l = 0;
int r = height.length - 1;
int result = 0;
while(l < r){
result = Math.max(result, Math.min(height[l], height[r]) * (r - l));
int k;
if(height[l] < height[r]){
k = l;
while(k < r && height[k] <= height[l]){
k++;
}
l = k;
}
else{
k = r;
while(k > l && height[k] <= height[r]){
k--;
}
r = k;
}
}
return result;
}
}
..., an, where each represents a point at coordinate (i, ai). n vertical
lines are drawn such that the two endpoints of line i is at (i, ai) and (i,
0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container.
思路:这道题的tag是two pointer。很明显,是要我们利用左右两个pointer,来寻找最优解。如果要存的水最多,我们需要宽和高都很大,最左指针和最右指针保证宽最大,但是高不一定是最大,左右两个指针,分别向中间遍历,如果遇到更低的数值则跳过,因为这种情况,水会更少(高和宽都降低了),如果遇到了更大的值,则保存下来,计算存水量。
public class Solution {
public int maxArea(int[] height) {
int l = 0;
int r = height.length - 1;
int result = 0;
while(l < r){
result = Math.max(result, Math.min(height[l], height[r]) * (r - l));
int k;
if(height[l] < height[r]){
k = l;
while(k < r && height[k] <= height[l]){
k++;
}
l = k;
}
else{
k = r;
while(k > l && height[k] <= height[r]){
k--;
}
r = k;
}
}
return result;
}
}
相关文章推荐
- LeetCode 之 Container With Most Water — C 实现
- [Leetcode] Container With Most Water
- [C++]LeetCode: 39 Container With Most Water
- LeetCode: Container With Most Water [Java]
- leetcode 11 Container with Most Water
- LeetCode-Container With Most Water
- LeetCode Container With Most Water
- LeetCode No.11 Container With Most Water
- LeetCode——Container With Most Water
- 最大容积--Container With Most Water of leetcode
- [leetcode]Container With Most Water
- 【LeetCode】Container With Most Water
- LeetCode 11 Container With Most Water
- leetcode:11. Container With Most Water
- LeetCode 之 Container With Most Water
- LeetCode "Container With Most Water"
- LeetCode算法问题6 —— Container With Most Water
- LeetCode Container With Most Water 查找容水量最大的容器 动态规划法思想分析
- LeetCode11-Container With Most Water
- LeetCode-Container With Most Water