我的思路:
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; }
代码简介就是一种美啊!!!
感觉现在智商有些不够用了,太捉急,现在还是先好好看点书,再来做题。拜了个拜!