第一周作业:11 container with most water

来源:互联网 发布:读取股票数据 编辑:程序博客网 时间:2024/04/30 07:00

 题目

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 linei 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 and n is at least 2.

代码:

 int maxArea(vector<int>& height) {        int water=0;        int i=0;        int j=height.size()-1;       while(i < j)        {           water = max(water, (j - i) * min(height[i], height[j]));            if(height[i] < height[j])                ++i;            else                --j;        }       return water;    }
题解:首先的思路:两个循环穷举比较求最大值,估计会超时,没试。于是设两个指针i,j分别指向头尾,并且设置个初始最大值为i,j指向头尾所形成的容积,在i<j的大前提下。比较i,j所指向的点的高度,移动i,j。如果H(i)<H(j),则形成新的容积肯定比初始值小,所以跳过不计,如果H(i)>H(j),则让新的容积与上一次比较,右边指针同理,直至其相遇,所求即为最大值。

0 0
原创粉丝点击