今天的两道算法
二分查找这道题可以说是十分经典了,它的原理理解起来不难,难点在于对边界的掌控。
这道题有两种解法,第一种,左闭右闭。
需要注意的是,循环条件处要写 <=, 因为当我们的锁定区间只有一个元素也就是mid的时候,他也是成立的。
第二种解法,左闭右开。
- 需要注意由于左侧的区间是右开的,所以我们锁定时要将mid剔除出去。
- 另外right的定义也需要注意,我们右开,所以right的初始位置应该是在数组末尾的下一位的。
第二道题,移除元素
因为元素顺序可以改变,所以一开始我的思路是一前一后双指针,如果left遇到了目标元素,就将 right-- 处的非目标值赋给left。
给我写的头都大了还是差三例没有通过,边界逻辑处理还是不够好。
卡哥的方法非常暴力但是非常优秀,我认为这种思考方式是抽象的,更加接近于真实的数组这种数据结构。
遍历覆盖法,效率嘎嘎高。不用管什么三七二十一,直接从头开始覆盖,因为right指针永远在右侧,所以不用担心边界问题。
今天刷完题,感觉对二分查找更为熟悉了,这种基础的就应该熟到牢记于心。 刷题要抛开现实生活固有的一些看法和观念,就比如今天的这个双指针暴力遍历,虽然真的很简单但是我完全没有往这方面想。日后继续努力!算法训练营第一天完美结束喽