代码随想录算法训练营第一天 | 704.二分查找,27.移除元素

704.二分查找

  题目链接:https://leetcode.cn/problems/binary-search/ 

  文章连接:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html

    视频链接: https://www.bilibili.com/video/BV1fA4y1o715

 

      自己的想法:看到题目的时,想到了大二数据结构期末考试的题,用二分查找算法查找某个数字经历了几次循环?然后就开始思考怎么分。

   看完代码随想录后:以为能根据网站上的代码直接写出题解,结果在抒写题解过程中频繁出错。

   学习中的问题和解决:

      1.左闭右开:nums[mid]>target时,需要更新右边界,右边界为开区间,本来就取不到nums[mid],所以写为nums[mid];

            nums[mid]<target时,需要更新左边界,左边界为闭区间,已知nums[mid]比target小,不需要取nums[mid],而是取nums[mid]+1。

      2.最终返回值是mid或-1,区间更新不需要返回,不然输出结果会与实际不符。做改变的是左右区间的下标值,而不是数据值,错误做法:将数据值进行+1,-1操作

      错误代码实例:

        

 

27.移除元素

  题目链接:https://leetcode.cn/problems/remove-element/ 

  文章连接:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html

  视频链接: https://www.bilibili.com/video/BV12A4y1Z7LP

 

      自己的想法:直接删除数组中的元素,将后面的元素的下标循环更新,得到一个新的数组。

   看完代码随想录后:通过双指针法,设置慢指针和快指针,慢指针:为新数组提供下标,快指针:遍历获取原数组元素,判断是否为需要删除元素。

  

  今日总结:

  1.对数组进行操作,由于数组的内存空间地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。其他元素的下标也会跟着发生改变。

  2.erase 时间复杂度是o(n)

  3.刷题时长:2.5h

  4.算法基础忘得差不多了,但自己一个人学根本提不起劲,还是得有人催,有人跟着一起学习,第一天get,往后一起加油!!!

  

  

  

 

     

      

     

posted @ 2022-12-07 16:42  从黑暗走向黎明  阅读(66)  评论(0)    收藏  举报