Container With Most Water问题

problem:

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.X轴为底,,两个纵轴为变,求容器的容积,短边是瓶颈。

thinking:

(1)短边决定水箱的有效高,底要尽可能的宽。

(2)典型的双指针求解的题型。

(3)贪心的策略,哪条边短,往里收缩寻找下一条边。

code:

class Solution {public:int maxArea(vector<int> &height) {// Start typing your C/C++ solution below// DO NOT write int main() functionint i = 0;int j = height.size() – 1;int ret = 0;while(i < j){int area = (j – i) * min(height[i], height[j]);ret = max(ret, area);if (height[i] <= height[j])i++;elsej–;}return ret;}};

时间复杂度为O(n)

暴力破解法:时间复杂度为O(n*n)

int area(vector<int>::iterator &a,vector<int>::iterator &b){return (b-a)*(*a>*b?*b:*a);}class Solution {public:int maxArea(vector<int> &height) {int max_area=0;for(vector<int>::iterator i=height.begin()+1;i!=height.end();i++){for(vector<int>::iterator j=height.begin();j!=i;j++){max_area=max(max_area,area(j,i));}}return max_area;}};

生活若剥去了理想、梦想、幻想,那生命便只是一堆空架子

Container With Most Water问题

相关文章:

你感兴趣的文章:

标签云: