继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

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

风吹尘
关注TA
已关注
手记 61
粉丝 9
获赞 1

课程名称: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()方法。

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

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

http://img.mukewang.com/6321368f00011f2019200892.jpg

http://img2.mukewang.com/632139c70001f9bd19200892.jpg

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP