这一题肉眼一看,直接暴力解题,但是也很显然,暴力会超时
暴力
时间复杂度O(n^2)
var maxArea = function (height) {
let len = height.length
let max = 0
for (let i = 0; i < len; ++i) {
for (let j = i; j < len; j++) {
let tmp = Math.min(height[i], height[j]) * (j - i)
max = Math.max(tmp, max)
}
}
return max
};
优化后
时间复杂度O(n)
var maxArea = function (height) {
let left = 0, right = height.length - 1
let max = 0
while (left < right) {
let min = Math.min(height[left], height[right])
let tmp = (right - left) * min
max = Math.max(max, tmp)
// 寻找到高于目前最小高度的一根柱子
while(left < right && height[left] <= min) left++
while(left < right && height[right] <= min) right--
}
return max
};