题目
题解
暴力破解
- 两层循环暴力对比
- 注意循环终止条件
- 注意面积的求积公式
- 每次loop比较、更新面积
/**
* @param {number[]} height
* @return {number}
*/
var maxArea = function(height) {
// 1. 边界情况处理
if (Array.isArray(height)) {
// 2. 两层循环求出每次的最大面积: 最短的那条边 * 两条线之间距离(长方形或者正方形)
let max = 0
for (let i = 0; i < height.length; i++) {
for (let j = i + 1; j < height.length; j++) {
max = Math.max(max, Math.min(height[j], height[i])*(j-i)) // 每次对比之前的max与此次循环的面积
}
}
return max
}
};
// 时间复杂度 O(n^2)
// 空间复杂度 O(1)
双指针
- 暴力法会进行很多没有必要的重复计算
- 我们可以采用双指针进行缩排减少搜索空间
- 此外当我们遇到需要考虑左右两头的问题时候,就可以考虑使用双指针
/**
* @param {number[]} height
* @return {number}
*/
var maxArea = function(height) {
let max = 0
let l = 0
let r = height.length - 1
while (l < r) {
max = Math.max(max, (r-l)*Math.min(height[r], height[l]))
// 较小的指针往较大的值移动 减少不必要的计算
if (height[l] < height[r]) {
l++
} else {
r--
}
}
return max
};
// 时间复杂度 O(n)
// 空间复杂度 O(1)
推荐阅读
ps: 欢迎关注我的公众号 xyz编程日记,不介意帮忙点个👍,点个在看。