1.1二分查找
题目要求:![](https://img-blog.csdnimg.cn/94ede49fbda349688dcd46b091bbeb7a.png)
思路:1.使用线性查找法逐个元素进行比较(不推荐)2.使用二分查找法
概念普及:二分查找法是定义一个区间,通过目标值与中间索引位置元素的大小进行比较,根据比较的结果,不断缩小区间的大小,进而找到目标值
难点:区间左闭右开、左闭右闭中的区间更新的细节把控(注意:前提条件:数组必须是有序的)
第一种实现方法:左闭右闭
需要注意 的细节:1.int mid = lef + (right - left)/2 是为了防止(right+left)/2造成溢出.2.循环条件之所以是<=是因为当left=right时满足区间的定义,及左右区间都可以取到 3 进行if判断后,mid是否加1还是取决于区间的定义,即左右边界都可以取到
第二种实现方法:左闭右开
细节:1 因为是左闭右开,所以一开始的右边界取得是数组的长度 2 进行if判断后同样是根据区间的定义(右边界取不到)来决定是否加1
1.2 移除元素
1.2.1 数组的理论基础
一维数组创建后的大小是不会发生变化的,只是数组中的元素个数发生了变化,移除某个索引上的元素只是覆盖,并不能真正的删除。该索引后的元素需要整体向左移动
1.2.2 暴力解法(时间复杂度为o(n^2))
外层for循环负责遍历整个数组,找到想要删除的元素
内层for循环负责将该索引之后的元素整体前移
细节:当元素整体前移时,该索引(i)必须减1,这样经过外层for循环后的自增操作后,才能保证当前索引值不变,以便比较移动到该位置的元素是否和目标值相同
1.2.2 双指针解法
思路:fast指针循环遍历整个元素,low指针表示新建元素的索引位置。初始值都为0,当fast指针所指元素!= 目标值时,arr_new[low++] = arr[fast],当fast指针遍历完整个数组时,low指针所指向的索引值就是删除元素后的数组长度。