课程名称:2周刷完100道前端优质面试真题
课程章节:第2章 前端面试技能拼图1 :数据结构和算法(上),大厂面试必考
主讲老师:双越
课程内容:
今天学习的内容包括:
2-18 找出一个数组中和为 n 的两个数-嵌套循环不是最优解——经过两层for循环后,耗时会跟着数量级的增加成指数增长,时间复杂度为O(n^2),不可用的算法。
2-19 找出一个数组中和为 n 的两个数-双指针的思路——介绍了理由有序处理查找,利用双指针采用二分思想实现。
2-20 找出一个数组中和为 n 的两个数-双指针的代码演示——双指针就是定义两个遍历,协助我们解决问题。
课程收获:
找出一个数组中和为 n 的两个数
给一个数组,找出其中和为n的两个元素
- 有一个递增的数组[1,2,4,7,11,15]和一个n = 15。
- 数组中有两个数,和是n。即4+11 === 15。
- 写一个JS函数,找出这两个数。
常规思路
- 嵌套循环,找到一个数,然后去遍历下一个数,求和,判断
- 时间复杂度是O(n^2),不可用
利用递增(有序)的特性
- 随便找两个数
- 如果和大于n,则需要向前寻找
- 如果和小鱼n,则需要向后寻找 —— 二分法(二分思想指导,并非二分法)
双指针,时间复杂度降低到O(n)
- 定义i指向头,j指向尾,求arr[i] + arr[j]
- 如果大于n,则j需要向前移动
- 如果小于n,则i需要向后移动
划重点
- 时间复杂度达到O(n^2),是不可用的算法
- 凡有序,必二分!!!
- 优化嵌套循环,可以考虑"双指针"
今天的 学习了 找出一个数组中和为 n 的两个数,课程通过循环嵌套和双指针实现查找,两种方法随着查找数组的数量增长,循环嵌套方法耗时成指数增长,不可用,双指针方法耗时基本无变化,故算法需要好好思考好好学。
下一步就是 学习 找出一个数组中和为 n 的两个数了。今天学习就先到这里吧。
坚持打卡,坚持学习,未来可期,加油😀~