zoukankan      html  css  js  c++  java
  • 盛水最多的容器-lc11题

    1.经典题,题目就不上了,上个图吧,注意数组至少有两个值

     2.暴力破解法

    直接算时间复杂度O(n^2),提交能够直接AC,但是时间消耗极大,只打败了7%的提交者

    class Solution {
        public int maxArea(int[] height) {
            int len = height.length;
            int max = 0;
            for(int i = 0; i < len; i++)
            for (int j = i + 1; j < len; j++)
            {
                int h = height[i] > height[j] ?  height[j] :  height[i];
                int w = (j - i) * h;
                max = max > w ? max : w;
            }
            return max;
        }
    }

    3.双指针法

    双指针这个解法没看过讲解真的很难想到。基本思路是两个指针分别指向数组的第一个位置和最后一个位置,然后数组元素较小的位置向前移动一位。(最难理解的一步,也是双指针的核心) 

    为什么较小的元素向前移动?因为移动较大的,当前面积一定会变小,首先底部长度会缩小1,高度不变或者变小。而移动较小的则会有可能变大。所以,我们必定能找到最大值。

    直接打败了92%的Java

            int len = height.length;
            int a = 0;
            int b = len - 1;
            int max = (b - a) * Math.min(height[a],height[b]);
            while(a < b - 1)
            {
                if(height[a] > height[b])
                {
                    b--;
                    max = Math.max(max, (b - a) * (height[a] > height[b] ? height[b] : height[a]));
                }
                else
                {
                    a++;
                    max = Math.max(max, (b - a) * (height[a] > height[b] ? height[b] : height[a]));
                }
            }
    
            return max;
  • 相关阅读:
    idea搭建Spring Boot+Mybatis及使用教程
    CentOS 6 安装配置JDK+tomcat环境
    关于无线路由器之间的连接
    关于链表的面试问题(判断一个单链表中是否有环)
    华为机试ACM(字符组合问题)
    Activity的启动模式
    Notification状态栏显示信息
    Java注释Override、Deprecated、SuppressWarnings
    Fragment
    Service
  • 原文地址:https://www.cnblogs.com/lbrs/p/13454501.html
Copyright © 2011-2022 走看看