題目:
解法一:組合所有可能,找出最大(超出時間限制)
class Solution:
def maxArea(self, height: List[int]) -> int:
max_= 0
for i in range(0,len(height)):
for j in range(i+1,len(height)):
flag = min(height[i],height[j]) * abs(i-j)
if flag > max_:
max_ = flag
return max_
解法二:雙指針法(132ms,14.6MB)
解釋:距離越遠的越好,並且兩塊板之間短板決定大小。從兩端開始滑動,直到兩端相遇(體現雙指針),因爲由短板決定,因此每次滑動方向由短端決定。
class Solution:
def maxArea(self, height: List[int]) -> int:
max_= 0
i = 0
j = len(height)-1
while(i!=j):
if height[i] < height[j]:
flag = height[i] *(j-i)
i +=1
else:
flag = height[j] *(j-i)
j -=1
if flag > max_:
max_ = flag
return max_