Container With Most Water :
时间:2015-06-09 13:53:19
收藏:0
阅读:104
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container.
题目解读:
有n个非负数,代表n个隔水板的高度,现在求两个隔水板之间最大的容水量,也就是找一对隔水板,距离*min(两个隔水板高度)的最大值。
解题思路:
方法一:穷举法 代码如下:
class Solution { public: int maxArea(vector<int>& height) { int length=height.size(); if(length<=1) return 0; int cap=0; for(int i=0;i<length-1;i++) { for(int j=i+1;j<length;j++) { if(min(height[i],height[j])*(j-i)>cap) cap=min(height[i],height[j])*(j-i); } } return cap; } };
方法一直观简单,但是会有超时现象。
方法二:
先求距离最远的两个隔板的存水量,当距离减小,想要增加存水量的时候,隔板最小高度应该相应增加。利用这种思想,我们有下面代码:
class Solution { public: int maxArea(vector<int>& height) { int length=height.size(); if(length<=1) return 0; int cap=0; int left=0,right=length-1; while(left<right) { if(min(height[left],height[right])*(right-left)>cap) cap=min(height[left],height[right])*(right-left); if(height[left]<height[right]) left++; else right--; } return cap; } };
评论(0)