标签:
转载请注明本文地址: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