LeetCode11-盛最多水的容器
一、思路
(一)双指针
设置两个指针,分别指向左右两端,固定左边指针,移动右边的指针,确定每次移动的容器容量并与当前最大容量进行比较
C++代码:
class Solution {
public:
int maxArea(vector<int>& height) {
int i = 0, len = height.size();
int area = 0, area_max = 0;
for (; i < len; i++) {
for (int j = height.size() - 1; j > i; j--) {
area = Min(height[i], height[j]) * (j - i);
if (area > area_max)
area_max = area;
}
}
return area_max;
}
int Min(int a, int b) {
if (a > b)
return b;
else
return a;
}
};
执行效率:
低的可怕,可以通过添加一些条件来加快程序运行
改进之后:
C++代码:
class Solution {
public:
int maxArea(vector<int>& height) {
int i = 0, len = height.size();
int area = 0, area_max = 0;
for (; i < len; i++) {
if (height[i] * (len - i - 1) < area_max)
continue;
for (int j = height.size() - 1; j > i; j--) {
if (height[i] * (j - i) < area_max)
break;
area = Min(height[i], height[j]) * (j - i);
if (area > area_max)
area_max = area;
}
}
return area_max;
}
int Min(int a, int b) {
if (a > b)
return b;
else
return a;
}
};
执行效率:
还是有待改进,排名靠前的方法应该是和这类思路不一样的方法