Container With Most Water 2019-03-14

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

 class Solution {

    public int maxArea(int[] height) {

        int max=0;

        for(int i=0;i

            for(int j=i+1;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

            int start=height[i];

            int end=height[j];

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

            max=Math.max(max,test);

            if(height[i]

                while(i

                    i++;

                }

            }else{

                while(i

                    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);

        }

    }

}

你可能感兴趣的:(Container With Most Water 2019-03-14)