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

65 阅读1分钟

704、二分查找

image.png 前提:数组有序且无重复

target定义在左闭右闭的区间内[left,right]

while(left<=right) left == right 有效

if (nums[middle] > target) right = middle-1 left = middle+1

27、移除元素

image.png

(1)暴力解法

两层for循环,一个for循环遍历数组元素 ,第二个for循环更新数组

for (int i = 0; i < length; i++) {
            if (nums[i] == val) { // 发现需要移除的元素,就将数组集体向前移动一位
                for (int j = i + 1; j < length; j++) {
                    nums[j - 1] = nums[j];
                }
                i--; // 因为下标i以后的数值都向前移动了一位,所以i也向前移动一位
                length--; // 此时数组的大小-1
            }
        }

(2)双指针

通过一个快指针和慢指针在一个for循环下完成两个for循环的工作

slowIndex : 指向更新 新数组下标的位置

fastIndex: 寻找新数组的元素 ,新数组就是不含有目标元素的数组

关键:

if (val != nums[fastIndex]) {
                nums[slowIndex++] = nums[fastIndex];
            }