课程名称:2周刷完100道前端优质面试真题
课程章节:第3章 前端面试技能拼图1: 数据结构和算法(下),大厂面试必考
主讲老师:双越
课程内容:
今天学习的内容包括:
3-7 【连环问】青蛙跳台阶有几种方式——用动态规划分析和解决问题,用递归思考问题,用循环解决问题。
3-8 移动 0 到数组的末尾-splice 会导致性能问题——使用循环在原数组中将0移动到数组尾部。
课程收获:
青蛙跳台阶
题解
- 一只青蛙,一次可跳1级,也可跳2级
- 问:青蛙跳到n级台阶,总共有多少种方式?
用动态规划分析问题
- 要跳到1级台阶,就1种方式t(1)=1
- 要跳到2级台阶,就⒉种方式t(2)=2
- 要跳到n级台阶: f(n) = f(n - 1) + f(n - 2)
移动 0 到数组的末尾
题解
- 如输入[1,0,3,0,11,0],输出[1,3,11,0,0,0]
- 只移动0,其他顺序不变
- 必须在原数组进行操作
如果不限制“必须在原数组操作”
- 定义part1 part2两个数组
- 遍历数组,非0 push 到part1 , 0 push 到part2
- 返回part1.concat(part2)
传统思路
- 遍历数组,遇到О则 push 到数组末尾
- 用splice截取掉当前元素
- 时间复杂度是O(n^2)——算法不可用
for (let i = 0; i < length - zeroLength; i++) {
if (arr[i] === 0) {
arr.push(0)
arr.splice(i, 1)
i--
zeroLength++
}
}
tips
- 自己要有独立思考的能力
- 要能够对时间复杂度,空间复杂度有一定的敏锐性
今天的 学习了 青蛙跳台阶和移动 0 到数组的末尾,使用了循环和splice进行处理,时间复杂度为O(n^2),是不可用的,数组较大时,耗时非常久,会导致程序崩溃。
下一步就是 学习 使用双指针来实现 移动 0 到数组的末尾。今天学习就先到这里吧。
坚持打卡,坚持学习,未来可期,加油😀~