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

186 阅读1分钟

704.二分查找

题目链接 文章讲解 视频讲解

原来自己会的是左闭右闭区间的方法,本次学习了左闭右开的方法。

  • 第一次写左闭右闭 left <= right,忘记写了=,没有通过所有测试用例,对开闭区间有更深刻的认识以后不会有这个错误了
  • 为什么右开,不是左开,因为right = nums.length,即数组长度,但是不能取最后一个下标,理论上左开应该也可以,但是估计会很别扭
  • right = mid,的原因是右开,mid !== target,所以不是right = mid - 1
  • 学习了不溢出的算法mid = left + Math.floor((right - left) >> 2),同时用>>代替/2会更高效一点(至少心里觉得更高端了),这块的原理后续有空学一下

27. 移除元素

题目链接 文章讲解 视频讲解

  • 暴力解法也写了好久,写错了n和size的关系,同时通过debug才发现需要i--
  • 思路是把后面的东西往前移,首先移过来的一定不是val,是有效的数字,但是移过来的数字会出现重复两次,通过debug发现会通过后续的移动把重复的数字覆盖掉