现在的位置: 首页 > 综合 > 正文

Container With Most Water

2017年12月22日 ⁄ 综合 ⁄ 共 920字 ⁄ 字号 评论关闭

Container With Most Water

我的思路:

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;
}

代码简介就是一种美啊!!!
感觉现在智商有些不够用了,太捉急,现在还是先好好看点书,再来做题。拜了个拜!

抱歉!评论已关闭.