web开发重点,CSS外边距塌陷问题(1)

本文介绍了两种解决最大面积组合问题的算法:暴力遍历(O(n^2)时间复杂度)和双指针循环(O(n)时间复杂度),并通过代码示例对比分析。重点在于如何在面试中优化解决方案以避免超时问题。
摘要由CSDN通过智能技术生成
  • 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)

AC 代码

====================================================================

题解一:暴力遍历


/**

  • @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) {

result = Math.max(

result,

(right - left) * Math.min(height[left], height[right])

)

if (height[left] < height[right]) {

left++

} else {

right–

}

}

return result

}

复制代码

总结

=================================================================

最后

在面试前我花了三个月时间刷了很多大厂面试题,最近做了一个整理并分类,主要内容包括html,css,JavaScript,ES6,计算机网络,浏览器,工程化,模块化,Node.js,框架,数据结构,性能优化,项目等等。

包含了腾讯、字节跳动、小米、阿里、滴滴、美团、58、拼多多、360、新浪、搜狐等一线互联网公司面试被问到的题目,涵盖了初中级前端技术点。

  • HTML5新特性,语义化

  • 浏览器的标准模式和怪异模式

  • xhtml和html的区别

  • 使用data-的好处

  • meta标签

  • canvas

  • HTML废弃的标签

  • IE6 bug,和一些定位写法

  • css js放置位置和原因

  • 什么是渐进式渲染

  • html模板语言

  • meta viewport原理

  • 25
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值