对撞指针
解题思路
定义 left、right 双指针分别指向数组的开始和结尾,定义一个面积 area 初始为 0;
利用求和公式
S(i,j) = min(h[i], h[j]) × (j−i)
对现有位置求面积,并和 area 对比把最大值赋值给 area;收缩 left、right 指针,哪一个指针对应的板子低,则向中间移动哪一块板子;
重复 2、3 步骤直到
left >= right
结束循环,返回 area;
复杂度
-
时间复杂度
O(N)
-
空间复杂度
O(1)
代码实现
var maxArea = function (height) {
let left = 0;
let right = height.length - 1;
let area = 0;
while (left < right) {
// 面积
let tmp = (right - left) * Math.min(height[left], height[right]);
area = Math.max(tmp, area);
height[left] < height[right] ? left++ : right--;
}
return area;
};
leetcode🧑💻 155. 最小栈
上一篇