最简单的做法是平方时间复杂。实现O(n)主要思想是双端开始遍历。每次移动时,需要考虑选择左还是右指针向中间移动,目的是减少暴力平方遍历次数。当宽度递减1时,能够增加面积的情况只能有一种,那就是更高的短板。如果在前进过程中,短
板更矮,则不需要算面积了,肯定变小
class Solution {
public:
int maxArea(vector<int>& height) {
int max_area = 0;
int len = height.size();
int i = 0;
int j = len - 1;
int temp_area = 0;
int diff = j - i;
int min_height = -1;
int iv, jv;
while (i < j) {
iv = height[i];
jv = height[j];
if (iv < jv) {
if (min_height < iv) {
min_height = iv;
temp_area = diff * min_height;
if (temp_area > max_area) {
max_area = temp_area;
}
}
i++;
}else {
if (min_height < jv) {
min_height = jv;
temp_area = diff * min_height;
if (temp_area > max_area) {
max_area = temp_area;
}
}
j--;
}
diff--;
}
return max_area;
}
};
评论 (0)