为了账号安全,请及时绑定邮箱和手机立即绑定

【九月打卡】第10天 搜索排序算法题

标签:
JavaScript

课程名称:JavaScript版数据结构与算法
课程章节:第11章 进阶算法之“搜索排序”
主讲老师:lewis

课程内容:

今天学习的内容包括:
11-9 LeetCode:21. 合并两个有序链表——使用双指针While循环判断处理即可。
11-10 LeetCode:374. 猜数字大小——通过这题熟悉和扎实二分查找。
11-11 排序与搜索-章节总结——排序和搜索总结介绍。

课程收获:

合并两个有序链表

解题思路
  • 与归并排序中的合并两个有序数组很相似。
  • 将数组替换成链表就能解此题。
解题步骤
  • 新建一个新链表,作为返回结果。
  • 用指针遍历两个有序链表,并比较两个链表的当前节点,较小者先接入新链表,并将指针后移一步。
  • 链表遍历结束,返回新链表。
 while (p1 && p2){
    if(p1.val < p2.val){
      p.next = p1;
      p1 = p1.next;
    }else{
      p.next = p2;
      p2 = p2.next;
    }
    p = p.next;
  }
时间,空间复杂度分析
  • 时间复杂度:O(n)。
  • 空间复杂度:O(1)。

猜数字大小

解题思路
  • 二分搜索的应用。
  • 调用 guess 函数,来判断中间元素是否是目标值。
解题步骤
  • 从数组的中间元素开始,如果中间元素正好是目标值,则搜索过程结束。
  • 如果目标值大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找。
while (low <= high){
      const mid = Math.floor((low + high) / 2);
      const res = guess(mid);
      if(res === 0){
        return mid;
      }else if(res === 1){
        low = mid + 1
      }else{
        high = mid -1
      }
    }
时间,空间复杂度分析
  • 时间复杂度:O(logN)。
  • 空间复杂度:O(1)。

章节总结

  • 排序:把某个乱序的数组变成升序或则降序的数组。
  • 搜索:找出数组中某个元素的下标。
  • JS中的排序:数组的sort()方法。
  • JS中的搜索:数组中indexOf()方法。

今天学习了 搜索排序的两道算法题,分别使用的是归并算法中的合并排序,以及二分搜索中的搜索方法,这两种是比较常用的,性能比较好。对自己说一句,加油😀~

坚持打卡,坚持学习!明天见💪~

https://img1.sycdn.imooc.com//6321368f00011f2019200892.jpg

https://img1.sycdn.imooc.com//632139c70001f9bd19200892.jpg

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消