704、二分查找
前提:数组有序且无重复
target定义在左闭右闭的区间内[left,right]
while(left<=right) left == right 有效
if (nums[middle] > target) right = middle-1 left = middle+1
27、移除元素
(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];
}