zoukankan      html  css  js  c++  java
  • [Leetcode]Container With Most Water随记

    No.11, Container With Most Water

    这道题目在坐标轴中给出了若干平行于y轴的竖线,每两个搭配加上x轴组成一个盛水的容器,找出容量最大的容器。

    最暴力的方法还是两重循环算,这不在我们讨论范围内。

    这里采用贪心算法实现,在该题中有一个规律,如果说最终的结果是ij两个竖线组成的容器最大(假设i<j),那么在i的左边肯定没有比i更高的线,j的右边肯定没有比j更高的线(因为一旦存在,那肯定更高的线组成的容器容量大,它不光墙壁高,x轴占得宽度也大)。那么我们只需要从两头开始遍历,设左右下标为i和j,如果i比j高,那么j--,否则i++。(可以这样设想,由于我们是贪心算法,如果遇到i比j低的情况,j的来源也是由于它比某个i左边的低才会移动到j现在的位置,那么既然i的左边存在比i高的,肯定是那条线和j组成的容器更大,所以i直接被忽略即可)。

    public class Solution {
        public int maxArea(int[] height) {
            int max=0;
            int i=0,j=height.length-1;
            while(i<j){
                int area=j-i;        
                if(height[i]<=height[j]){
                    area=area*height[i];
                    i++;
                }
                else{
                    area=area*height[j];
                    j--;
                }
                max=Math.max(max, area);
            }       
            return max;
        }
    }
  • 相关阅读:
    Oracle数据库ORA-12154: TNS: 无法解析指定的连接标识符详解
    Oracle Client客户端+PLSQL配置
    函数和存过的创建调用
    MVC学习二:基础语法
    前台和后台的相互传值
    MVC学习一:EF
    博客转发小工具2
    博客转发小工具1
    博客园页面设置
    js问题杂记
  • 原文地址:https://www.cnblogs.com/lilylee/p/5220347.html
Copyright © 2011-2022 走看看