Container With Most Water 2019-03-14

1.日常暴力解法的我,捂脸

 class Solution {

    public int maxArea(int[] height) {

        int max=0;

        for(int i=0;i<height.length-1;i++){

            for(int j=i+1;j<height.length;j++){

                max=Math.max(max,water(height[i],i,height[j],j));

            }

        }

        return max;


    }

    public int water(int a,int i,int b,int j){

        if(a>b){

            return b*(j-i);

        }else{

            return a*(j-i);

        }

    }

}

2.从左右两边的指针开始,假设此时的容量最大,判断这两个指针对应值的大小,小的那个则自增或者自减,在找到比该值大的值的时候停止。因为想让容量变大在宽度变小的同时只有‘高’变大容量才能增大,所以只有移动‘高’较小的指针,才能找出较大的值,这样子,当两个指针指向同一个值时结束,节省了很多不必要的判断,时间复杂度为O(n)。

class Solution {

    public int maxArea(int[] height) {

        int i=0;

        int j=height.length-1;

        int max=0;

        while(i<j){

            int start=height[i];

            int end=height[j];

            int test=water(start,i,end,j);

            max=Math.max(max,test);

            if(height[i]<height[j]){

                while(i<j&&height[i]<=start){

                    i++;

                }

            }else{

                while(i<j&&height[j]<=end){

                    j--;

                }

            }

        }

        return max;


    }

    public int water(int a,int i,int b,int j){

        if(a>b){

            return b*(j-i);

        }else{

            return a*(j-i);

        }

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • <center>#1 Two Sum</center> link Description:Given an arr...
    铛铛铛clark阅读 2,253评论 0 3
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,979评论 0 2
  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,438评论 0 2
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,362评论 0 9
  • 因为申请简书写文,需要取个合适的名字。不想离自己常用名字太远,又不想使用常用名,很是纠结了一番。又希望吸引眼球,又...
    Gi言吉语阅读 182评论 0 1