题意:
解题思路:
思路:
* 用两个指针i,j分别指向首尾,如果h[i] < h[j], i 向右移动,
反之j向左移动,直到i = j,每次迭代更新最大值;
* 时间复杂度分析:两个指针总共扫描 n 次,因此总时间复杂度是 O(n).
PHP代码实现:
class Solution {
/**
* @param Integer[] $height
* @return Integer
*/
function maxArea($height) {
$res = 0;
$i = 0; $j = count($height) - 1;
while ($i < $j) {
$res = max($res,
min($height[$i], $height[$j]) * ($j - $i));
if ($height[$i] < $height[$j]) $i++;
else $j--;
}
return $res;
}
function maxArea1($height) {
$max = 0;
for ($i = 0; $i < count($height) - 1; ++$i) {
for ($j = $i + 1; $j < count($height); ++$j) {
$cur = min($height[$i], $height[$j]) * ($j - $i);
$max = max ($cur, $max);
}
}
return $max;
}
}
GO代码实现:
func maxArea(height []int) int {
n := len(height)
if n < 2 {
return 0
}
i, j, max := 0, n-1, 0
for i <= j {
max = Max(max, (j-i) * Min(height[i], height[j]))
if height[i] <= height[j] {
i++
} else {
j--
}
}
return max
}
func Max(a, b int) int {
if a > b {
return a
}
return b
}
func Min(a, b int) int {
if a > b {
return b
}
return a
}