Leetcode第十一题——数组短板面积

题目描述:

  

 

   解法一:暴力解法

    

class Solution {
    public int maxArea(int[] height) {
        int Area=0;
        int max=0;
        ArrayList<Integer> Arealist = new ArrayList<>();


        for(int idx=0;idx<height.length;idx++){
            for(int idx2=1;idx2<height.length;idx2++){
                if(height[idx]>height[idx2]){
                    Area=height[idx2]*(idx2-idx);

                }else{
                    Area=height[idx]*(idx2-idx);

                }
                if(max<Area){
                    max=Area;
                }
            }
        }
        
        return max;

    }
}

  时间复杂度为O(n^2),空间复杂度为O(1).

    解法二:双指针

    

class Solution {
    public int maxArea(int[] height) {
        int left=0;
        int right=height.length-1;
        /**
         * 1.当height[left]>height[right]:
         *     如果左指针向着左边走,面积越来越小
         * 2.当height[left]<height[right]:
         *    同理。
         *    总结,谁大谁不动,谁小谁动。
         *
         *
         *
         */
        int max=0;
        while(left<right){
            int Area=Math.min(height[left],height[right])*(right-left);
            if(height[left]>=height[right]){
                right--;
            }else{
                left++;
            }
            max=Math.max(max,Area);
        }
        return max;
    }
}

 

posted @ 2020-08-30 02:17  huxiaojie  阅读(147)  评论(0编辑  收藏  举报