课程名称:2周刷完100道前端优质面试真题
课程章节:第2章 前端面试技能拼图1 :数据结构和算法(上),大厂面试必考
主讲老师:双越
课程内容:
今天学习的内容包括:
2-5 把一个数组旋转 k 步-代码演示和单元测试——旋转k步就是把尾部的数值移动到头部,执行k次。
2-6 把一个数组旋转 k 步-性能分析——分析两种旋转k步的性能。
课程收获:
把一个数组旋转 k 步-代码演示和单元测试
- 使用
pop()
和unshift()
在for循环中实现旋转。 - 使用
slice()
和concat()
实现旋转k次。 - slice(负值)得到的是数组的最后几个值的数组。
- 编写的方法需要使用export进行抛出,以便jest测试。
describe('测试组', function () {
it('测试项', () => {
...
expect(返回值).toEqual(预计值) // 断言
})
})
性能分析
复杂度分析
- 思路1:时间复杂度O(n^2) ,空间复杂度O(1)。
- 思路2∶时间复杂度O(1),空间复杂度O(n)。
- 数组是一个有序结构(连续内存),unshift 操作非常慢,push是比较快的。
答案
- 选择思路2∶拆分数组,最后concat拼接,返回。
- 时间复杂度O(1),足够快。
- 空间复杂度O(n),但不重要。
划重点
- 注意算法时间复杂度(前端重时间,轻空间)。
- 识破内置API的时间复杂度(如unshift )。
- 单元测试,考虑参数非法情况,提升代码健壮性。
- 不要过度优化。
- 第一,前端优先考虑时间复杂度-抓住重点。
- 第二,比复杂度更重要的是:代码逻辑清晰,易读。
今天的 学习了 把一个数组旋转 k 步,并对算法进行代码编写、单元测试和性能分析,让我感觉知其然而知所以然,感觉收获挺大。
下一步就是 判断字符串的括号是否匹配算法了。今天学习就先到这里吧。
坚持打卡,坚持学习,未来可期,加油😀~
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦