11.leetcode Container With Most Water(medium)[分析规律减少搜索空间]
来源:互联网 发布:书生软件手机版 编辑:程序博客网 时间:2024/06/14 18:43
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.
求(i-j)*min(ai,aj)的面积,这里其实就是求任意两个隔板间最大的装水量,为距离与较低隔板的高度的乘积。暴力破解就是O(n2),但是这里我们知道整个面积受两个因素的影响,一个是长度abs(i-j),当i、j分别为数组的首尾时最大,然而此时的min(ai,aj)不一定是最优的。因此从两端往中间遍历,最大面积的j的右端不会有比它高的线,i的左边也不会有比它高的线。所以对于每个当前的较小的线,往右或者往左查找第一个比height[i]高的数值作为可能的备选得到面积。
class Solution {public: int maxArea(vector<int>& height) { int area = 0; int n = height.size(); if(n<=0) return area; /*for(int i=0;i<n-1;i++) //暴力解决 for(int j= i+1;j<n;j++) { int a = j-i; int b = height[i]>height[j]?height[j]:height[i]; if(area<a*b) area = a*b; }*/ //由于长最长的时候一定是整个数组的长度,但是高可能会影响,所有每次从两边往中间值,存放可能出现最大值的暂存值 int i=0,j=n-1; while(i<j) { int b = height[i]>height[j]?height[j]:height[i]; if((j-i)*b > area) area = (j-i)*b; if(height[i]<height[j]) { int temp = i; while(height[temp]<=height[i]&&temp<j)//找到第一个比height[i]高的数值作为可能的备选 ++temp; i = temp; }else { int temp = j; while(height[temp]<=height[j]&&temp>i) --temp; j = temp; } } return area; }};
0 0
- 11.leetcode Container With Most Water(medium)[分析规律减少搜索空间]
- [Leetcode 11, Medium] Container With Most Water
- Leetcode 11. Container With Most Water (Medium) (cpp)
- Leetcode 11. Container With Most Water (Medium) (java)
- 【LeetCode】11.Container With Most Water(Medium)解题报告
- 11. Container With Most Water Medium
- 11. Container With Most Water Medium
- [LeetCode] Container With Most Water 简要分析
- [LeetCode] 011. Container With Most Water (Medium) (C++/Java/Python)
- LeetCode-11-Container With Most Water(证明)-Medium
- (算法分析Week6)Container With Most Water[Medium]
- LeetCode 11. Container With Most Water
- [LeetCode]11.Container With Most Water
- LeetCode --- 11. Container With Most Water
- LeetCode 11.Container With Most Water
- [Leetcode] 11. Container With Most Water
- [leetcode] 11.Container With Most Water
- 【leetcode】11. Container With Most Water
- 1011. A+B和C (15)
- 六度分离 hd 1869
- Android视频播放之vitamio播放视频(一)
- HDU 1596 find the safest road (最短路径----dijkstra)
- Linux 文件夹权限
- 11.leetcode Container With Most Water(medium)[分析规律减少搜索空间]
- iOS开发中,搜索结果与搜索关键字匹配的位置变色
- IOS内存管理ss
- 动态代理GOF模式
- Android使用ccache减少编译时间
- iOS 调用系统的打电话功能
- Python简史
- c/c++第十天
- technical knowledge 3