题目描述:
解法一:暴力解法
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; } }