Container With Most Water

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) 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.

 

我能想到的O(n^2)的算法。不过会出现超时。

C++实现如下:

#include<iostream>
#include<vector>
using namespace std;

class Solution
{
public:
    int maxArea(vector<int> &height)
    {
        if(height.empty()||height.size()==1)
            return 0;
        int n=height.size();
        int i,j;
        int maxArea=0;
        for(i=0; i<n-1; i++)
        {
            for(j=i+1; j<n; j++)
            {
                int tmp=min(height[i],height[j])*(j-i);
                if(maxArea<tmp)
                    maxArea=tmp;
            }
        }
        return maxArea;
    }
};

int main()
{
    Solution s;
    vector<int> vec={2,4,1,3,0,6};
    cout<<s.maxArea(vec)<<endl;
}

参考:http://www.cnblogs.com/lichen782/p/leetcode_Container_With_Most_Water.html

 

O(n)的复杂度。保持两个指针i,j;分别指向长度数组的首尾。如果ai 小于aj,则移动i向后(i++)。反之,移动j向前(j--)。如果当前的area大于了所记录的area,替换之。这个想法的基础是,如果i的长度小于j,无论如何移动j,短板在i,不可能找到比当前记录的area更大的值了,只能通过移动i来找到新的可能的更大面积。

C++实现代码如下:

#include<iostream>
#include<vector>
using namespace std;

class Solution
{
public:
    int maxArea(vector<int> &height)
    {
        if(height.empty()||height.size()==1)
            return 0;
        int n=height.size();
        int i,j;
        int maxArea=0;
        i=0;
        j=n-1;
        while(i<j)
        {
            int tmp=min(height[i],height[j])*(j-i);
            if(maxArea<tmp)
                maxArea=tmp;
            if(height[i]<height[j])
                i++;
            else
                j--;
        }
        return maxArea;
    }
};

int main()
{
    Solution s;
    vector<int> vec= {2,4,1,3,0,6};
    cout<<s.maxArea(vec)<<endl;
}

 

时间: 2024-11-09 01:01:10

Container With Most Water的相关文章

[LeetCode]11.Container With Most Water

[题目] 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 con

LeetCode 11 Container With Most Water(最大水容器)

翻译 给定n个非负整数a1,a2,...,an,其中每个代表一个点坐标(i,ai). n个垂直线段例如线段的两个端点在(i,ai)和(i,0). 找到两个线段,与x轴形成一个容器,使其包含最多的水. 备注:你不必倾倒容器. 翻译 Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such tha

[LeetCode]42.Trapping Rain Water

[题目] Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it is able to trap after raining. For example,  Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. The above elevation map is represente

&lt;font color=&quot;red&quot;&gt;[置顶]&lt;/font&gt;

Profile Introduction to Blog 您能看到这篇博客导读是我的荣幸,本博客会持续更新,感谢您的支持,欢迎您的关注与留言.博客有多个专栏,分别是关于 Windows App开发 . UWP(通用Windows平台)开发 . SICP习题解 和 Scheme语言学习 . 算法解析 与 LeetCode等题解 . Android应用开发 ,而最近会添加的文章将主要是算法和Android,不过其它内容也会继续完善. About the Author 独立 Windows App 和

leetcode难度及面试频率

转载自:LeetCode Question Difficulty Distribution               1 Two Sum 2 5 array sort         set Two Pointers 2 Add Two Numbers 3 4 linked list Two Pointers           Math 3 Longest Substring Without Repeating Characters 3 2 string Two Pointers      

LeetCode总结【转】

转自:http://blog.csdn.net/lanxu_yy/article/details/17848219 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近完成了www.leetcode.com的online judge中151道算法题目.除各个题目有特殊巧妙的解法以外,大部分题目都是经典的算法或者数据结构,因此做了如下小结,具体的解题思路可以搜索我的博客:LeetCode题解 题目 算法 数据结构 注意事项 Clone Graph BFS 哈希表 Word Ladder II

LeetCode All in One 题目讲解汇总(持续更新中...)

终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 如果各位看官们,大神们发现了任何错误,或是代码无法通过OJ,或是有更好的解法,或是有任何疑问,意见和建议的话,请一定要在对应的帖子下面评论区留言告知博主啊,多谢多谢,祝大家刷得愉快,刷得精彩,刷出美好未来- 博主制作了一款iOS的应用"Leetcode Meet Me",里面有Leetcode上所有的题目,并且贴上了博主的解法,随时随地都能

DataBinder.Eval和Container.DataItem有什么区别

DataGrid控件,在ItemTemplate显示数据时, DataBinder.eval_r(Container.DataItem,"Name")和Container.DataItem("Name")有什么区别?   DataBinder是System.Web里面的一个静态类,它提供了Eval方法用于简化数据绑定表达式的编写,但是它使用的方式是通过Reflection等开销比较大的方法来达到易用性,因此其性能并不是最好的.   Container则根本不是任何一

【转】Open Container Initiative发布Roadmap,部分核心技术CoreOS被排除在外

文章来自AlaudaCloud 小璐同学的翻译.原标题为:OCI正式发布Roadmap及技术管理模式. AlaudaCloud 今年6月的DockerCon上,Docker宣布了Open Container Initiative的成立.OCI意在业界一起合作,开发一个开放的.标准的容器格式和runtime,目前已经有43个公司参与进来,但是一直没有特别重大的发布,今天OCI发布了正式的技术管理模式,以及1.0的roadmap.也就是正式对外说:我们要开始干活啦! OCI也属于Linux基金会的协