码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode:Container With Most Water

时间:2015-07-05 09:46:32      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:

转载请注明本文地址:http://blog.csdn.net/yangnanhai93

Leetcode题目链接地址:https://leetcode.com/problems/container-with-most-water/


暴力的方式还是很简单的,O(n^2)可以完成,任意两个的组合都是可以解决这个问题的,但是,仔细想想,可以发现,题目还是有规律的。


算法的思路是选择最外围的两个挡板,然后去除一个短的,如此递归,即可完成计算;


证明:

假设,存在挡板A、B,A->height<B.height,但是,存在C,使得A与C组成的槽,可以盛A与B更多的水,即有:

A->height*AB间距<min(A->height,C->height)*AC间距<=A->height*AC间距

即得到:AB间距<AC间距,明显与上述假设AB是最外围矛盾。

所以,如果能够取得更大的值,则不可能是保留短的板,所以算法是正确的


class Solution {
public:
    int maxArea(vector<int>& height) {
        int left=0,right=height.size()-1;
        int result=0;
        while(left<right)
        {
            if(height[left]<height[right])
            {
                if(result<height[left]*(right-left))
                    result=height[left]*(right-left);
                left++;
            }
            else
            {
                if(result<height[right]*(right-left))
                    result=height[right]*(right-left);
                right--;
            }
        }
        return result;
    }
};


版权声明:本文为博主原创文章,未经博主允许不得转载。

Leetcode:Container With Most Water

标签:

原文地址:http://blog.csdn.net/yangnanhai93/article/details/46756489

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!