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

331 阅读1分钟

今天的两道算法

二分查找这道题可以说是十分经典了,它的原理理解起来不难,难点在于对边界的掌控。

这道题有两种解法,第一种,左闭右闭。

image.png 需要注意的是,循环条件处要写 <=, 因为当我们的锁定区间只有一个元素也就是mid的时候,他也是成立的。

第二种解法,左闭右开。

image.png

  • 需要注意由于左侧的区间是右开的,所以我们锁定时要将mid剔除出去。
  • 另外right的定义也需要注意,我们右开,所以right的初始位置应该是在数组末尾的下一位的。

第二道题,移除元素

image.png

因为元素顺序可以改变,所以一开始我的思路是一前一后双指针,如果left遇到了目标元素,就将 right-- 处的非目标值赋给left。

image.png

给我写的头都大了还是差三例没有通过,边界逻辑处理还是不够好。

卡哥的方法非常暴力但是非常优秀,我认为这种思考方式是抽象的,更加接近于真实的数组这种数据结构。

image.png

遍历覆盖法,效率嘎嘎高。不用管什么三七二十一,直接从头开始覆盖,因为right指针永远在右侧,所以不用担心边界问题。

image.png

今天刷完题,感觉对二分查找更为熟悉了,这种基础的就应该熟到牢记于心。 刷题要抛开现实生活固有的一些看法和观念,就比如今天的这个双指针暴力遍历,虽然真的很简单但是我完全没有往这方面想。日后继续努力!算法训练营第一天完美结束喽