代码随想录Day1 | 704. 二分查找、27. 移除元素

934 阅读1分钟

704 二分查找

题目连接:704.二分查找 -力扣 LeetCode

二分看起来比较容易,但是写起来细节很容易出错,比如while循环里是<= 还是 < , right = mid-1 还是 right = mid ? (细节决定成败嘛)

首先循环里到底是 <= 还是 < 其实主要看你的区间定义,如果是左闭右闭,left==right就是合法的, 合法的我们就需要放到循环中进行判断(left<=right),如果是左闭右开的,那left == right 就是不合法的(left<right)。

然后我们再来看看right=mid-1 还是 right=mid (mid=(right+left)/2), 其实这里和区间也有关系,我们可以想一下,如果是左闭右闭区间,right=mid ,但是我们在之前已经判断了 mid的位置的值并不等于 target,那我们就不用将mid的值交给下一次循环进行判断了,但是如果是左闭右开区间,右边本来就不会进行循环,那我们mid=right就没有问题了

下面是代码(新手初学,大佬勿喷)~~

image.png

时间复杂度(O(logn))

空间复杂度(O(1))


27 移除元素

题目链接27.移除元素 - 力扣 LeetCode

这道题我采用的是快慢指针,可以做到遍历一遍数组就可以移除掉我们需要移除的元素,只需要注意的 是,数组索引不要越界

虽然是移除元素,但是不需要真正的去删除元素,只需要将要删除的元素进行覆盖就可以 我们只需要在循环的时候将不需要删除的元素覆盖到需要删除的元素的位置上就可以了

下面是代码展示 image.png

时间复杂度(O(n))

空间复杂的(O(1))