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

    暴力题解:双重for循环,时间复杂度O(n^2)

    class Solution {
        public int max(int a,int b){
            if(a>=b) return a;
            return b;
        }
        public int min(int a,int b){
            if(a>=b) return b;
            return a;
        }
        public int maxArea(int[] height) {
            int n=height.length;
            int res=0;
            for(int i=0;i<n;i++){
                for(int j=i+1;j<n;j++){
                    res=max((j-i)*min(height[i],height[j]),res);
                }
            }
            return res;
       
        }
    }
    
    

    双指针:时间复杂度O(n)

    一个指针指向开头,一个指向结尾,此时容器的底最大,当移动指针不管是左指针往右移动还是右指针往左移动都会使底-1,那么如何选择?

    此时我们应该保持容器的高尽可能地大,所以当左指针指向的值小,左指针向右移动一个,同理,当右指针指向的值小,右指针向左移动一个。

    class Solution {
        public int maxArea(int[] height) {
         int i = 0,j = height.length-1;
         int ans = 0;
         while(i < j){
             ans =  Math.max(ans,(j - i)*Math.min(height[i],height[j])) ;
             if(height[i] >= height[j]) j--;
             else   i++;
             }
             return ans;
         }
    }
    
    
  • 相关阅读:
    10_树基础部分
    11_多线程
    14_JUC
    Servlet代码实例
    关于JSP引用资源路径
    Struts2代码实例
    hadoop三大核心组件介绍
    presto自定义函数开发
    git使用
    hive优化总结
  • 原文地址:https://www.cnblogs.com/cstdio1/p/13410342.html
Copyright © 2011-2022 走看看