解题思路:
1.暴力法 双层遍历 时间复杂度O(n^2) 空间复杂度O(1)
2.双指针法 左右指针从两侧向中间遍历 时间复杂度O(n) 空间复杂度O(1)
代码:
public static void main(String[] args) {
int[] arr={1,8,6,2,5,4,8,3,7};
int num = maxArea2(arr);
System.out.println(num);
}
/**
* @Description: 暴力法 时间复杂度O(n^2) 空间复杂度O(n)
* @Date: 2020/2/20 22:25
* @Author: fuguowen
* @Return
* @Throws
*/
public static int maxArea(int[] height) {
int ans=0;
for(int i=0;i<height.length-1;i++){
for(int j=i+1;j<height.length;j++){
ans=Math.max(ans,Math.min(height[j],height[i])*(j-i));
}
}
return ans;
}
/**
* @Description: 双指针法 时间复杂度O(n) 空间复杂度O(n)
*定义左右指针,比较两个指针指向的值,左指针<右指针,左指针向前移动。 左指针>右指针,右指针向前移动,每次更新面积的值
* @Date: 2020/2/20 22:25
* @Author: fuguowen
* @Return
* @Throws
*/
public static int maxArea2(int[] height) {
int ans=0;
int l=0;
int r=height.length-1;
while(l<r){
ans=Math.max(ans,Math.min(height[l],height[r])*(r-l));
if(height[l]<height[r]){
l++;
}else{
r--;
}
}
return ans;
}