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;
        }
    }
  • 相关阅读:
    Redis线程模型理解
    策略模式
    Spring Cloud 5大组件介绍
    单例模式
    hotspot虚拟机的调试
    编译虚拟机jvm——openjdk的编译
    mybatis的搭建和注入spring的方式
    springMvc+hibernate的web application的构建
    关于本博客
    本博客已停更
  • 原文地址:https://www.cnblogs.com/lilylee/p/5220347.html
Copyright © 2011-2022 走看看