我的思路:
1、给一个数列,每个值相当于长方形的高,一个数列相当于有很多条高,求出最大的面积是多少?
2、这里也是想到了两个指针往中间移动,但是写的代码非常复杂。思路非常混乱。不忍直视,下面是没有通过的代码:
int begin = 0, end = height.size() - 1, low = height[begin] < height[end] ? begin : end;
int i = 0, j = end;
int max = 0, tmp;
for ( ; i < j; i++, j--) {
while (low == begin && height[i] < height[low] && i < j)
i++;
if ((tmp = (height[low = height[i] > height[end] ? end : i]) * (end - i)) > max) {
begin = i;
max = tmp;
}
while (low == end && height[j] < height[low] && i < j)
j--;
if ((tmp = (height[low = height[begin] > height[j] ? j : begin]) * (j - begin)) > max) {
end = j;
max = tmp;
}
}
return max;
别人思路:
1、下面代码来自这个地址:简洁代码
2、一直就在想肯定能有这样简洁的代码的,因为这个卖股票是类似的,好好学习下面的代码:
int maxArea(vector<int> &height) {
int i = 0, j = height.size() - 1;
int maxArea = 0, temp;
while (i < j) {
//获取当前面积,判断如果大于最大值,就保存
if(maxArea < (temp = (j - i) * (height[i] > height[j] ? height[j] : height[i])))
maxArea = temp;
//当height[i]的值比height[j]小的时候,往前移动获取更大的值
if(height[i] < height[j])
i++;
else
//如果大,就移动j来获取更大的值
j--;
}
return maxArea;
}
感觉现在智商有些不够用了,太捉急,现在还是先好好看点书,再来做题。拜了个拜!