解題思路:
1,暴力解法(超時)
我們可以使用兩層for循環進行遍歷。找到那個最大的面積即可,這里我就不寫代碼了,因為寫了也是超時。
2,雙指針法
先定義兩個指針一個在最左端,一個在最右端:矩形的體積是 底*高 ,我們將兩個指針之間的距離當做底,當兩個指針移動時底一定會減小,所以如果此時高還在減小,那么他的面積肯定會減小,所以我們就找高增大的作為矩形的兩邊,因此就有了height[left] > height[right] 這個判斷條件,每次移動后都要比較,并取最大的體積,然后重復循環即可。此算法的時間復雜度是O(n)。
代碼實現
class Solution {public int maxArea(int[] height) {int left = 0,right = height.length - 1;int ret =0;while(left < right){int v = (right - left) * Math.min(height[left],height[right]);if(height[left] > height[right]){right--;}else {left++;}if( ret < v){ret = v;}}return ret;}
}