给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线
动态规划
var maxArea = function (height) {
var h = Math.min(height[0], height[1])
let area = h * 1
for (let i = 0; i < height.length; i++) {
let end = i + 1
while (end < height.length) {
area = Math.max((end - i) * (Math.min(height[i], height[end])), area)
end++
}
}
return area
};
var height = [1, 8, 6, 2, 5, 4, 8, 3, 7]
console.log(maxArea(height))
双指针
var maxArea = function (height) {
let l = 0
let r = height.length - 1;
let area = 0;
while (l < r) {
area = Math.max(Math.min(height[l], height[r]) * (r - l), area);
if (height[l] <= height[r]) {
++l;
} else {
--r;
}
}
return area;
};
var height = [1, 8, 6, 2, 5, 4, 8, 3, 7]
console.log(maxArea(height))
请用今天的努力,让明天没有遗憾。