题意:
解题思路:
思路: * 用两个指针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}