最后
整理面试题,不是让大家去只刷面试题,而是熟悉目前实际面试中常见的考察方式和知识点,做到心中有数,也可以用来自查及完善知识体系。
《前端基础面试题》,《前端校招面试题精编解析大全》,《前端面试题宝典》,《前端面试题:常用算法》
输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
复制代码
示例 2:
输入:height = [1,1]
输出:1
复制代码
示例 3:
输入:height = [4,3,2,1,4]
输出:16
复制代码
示例 4:
输入:height = [1,2,1]
输出:2
复制代码
提示:
-
n = height.length
-
2 <= n <= 3 * 104
-
0 <= height[i] <= 3 * 104
===================================================================
逐个尝试每两条 bar 的组合,求出面积,得到最大的组合。
-
时间复杂度: O(n^2),循环运行 n(n-1)/2 次
-
空间复杂度: O(1),只使用了常数个变量
tips:
很遗憾,这个算法被 LeetCode 判为超时……
使用双指针从两端向中心移动,每次移动较矮的那端以做其他的线段尝试,仍然取最大组合。
循环一遍就可以了
-
时间复杂度:O(n)
-
空间复杂度:O(1)
====================================================================
/**
-
@param {number[]} height
-
@return {number}
*/
var maxArea = function (height) {
if (height.length <= 1) {
return 0
}
let maxArea = 0
let area = 0
let minBar = 0
for (let i = 0; i < height.length; i++) {
for (let j = i + 1; j < height.length; j++) {
minBar = Math.min(height[i], height[j])
area = minBar * (j - i)
maxArea = Math.max(maxArea, area)
}
}
return maxArea
}
复制代码
/**
-
@param {number[]} height
-
@return {number}
*/
var maxArea = function (height) {
let left = 0
let right = height.length - 1
let result = 0
while (left < right) {
最后
由于文档内容过多,为了避免影响到大家的阅读体验,在此只以截图展示部分内容