704.二分查找&27.移除元素

704.二分查找

题目链接704. 二分查找 - 力扣(LeetCode)
第一思路:

暴力法,循环查找相同元素,抛出下标值

第二思路:

仔细看题,题目需要使用二分查找,是有序的数组,那么就需要查找数组的中间值,用来不断的将判断范围缩小,减少不必要的运算;将数组mid位置的值与target相比较,若mid大于target,只需要比较mid到right的值,逐步缩小范围;若相反则只需要比较left到mid的值;

注意点:

1、注意mid的设置,防止越界;
2、注意left与right比较,是否有=号,确定开区间与闭区间的区别;

屏幕截图 2022-10-13 221742.png

27.移除元素

题目链接:27. 移除元素 - 力扣(LeetCode)
第一思路:

将数组中元素移除,顺便将length数组减一,这样只获取到数组剩余的值即可;

注意点:

1、需要考虑重复元素替换的问题
2、需要考虑数组长度不断变化的问题

image.png
第二思路:

双指针法:通过两个指针,在一个for循环中完成两个for循环的工作;快慢指针同时前进,当快指针查找到目标元素时,慢指针暂停,快指针继续指向下一位,然后删除目标元素(即使用后位元素替换目标元素),然后慢指针继续前进,直到快指针查找完全部元素,返回慢指针的个数即可;

注意点:

1、i其实不必要了,直接可以用fast代替i,这样可以减少一个变量;
2、slow++可以直接写到nums[slow++]中,更简练


image.png
想法:本来没有想到双指针的想法,原来双指针在我想法中都是用来做循环的,没想到这里还可以用到;
资料来源:

1、代码随想录 (programmercarl.com)

你可能感兴趣的:(704.二分查找&27.移除元素)