Leetcode:Container With Most Water

转载请注明本文地址:

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

相关文章:

你感兴趣的文章:

标签云: