704. 二分查找
二分查找注意区间是左闭右开还是左闭右闭。
下面是左闭右闭区间的。
function binarySearch(nums, target) {
let left = 0;
let right = nums.length - 1;
// 因为是左闭右闭区间,所以需要走到右端点,使用小于等于
while(left <= right) {
// 不使用相加求中点,避免数字过大溢出,也可以使用位运算
let mid = left + Math.floor((right - left) / 2);
if (nums[mid] > target) {
// 如果目标值在区间的左边,那么更新右端点
right = mid - 1;
} else if (nums[mid] < target) {
// 如果目标值在区间的右边,那么更新左端点
left = mid + 1;
} else {
// 查找到目标值
return mid;
}
}
// 如果没有查找到,返回-1
return -1;
}
27. 移除元素
使用快慢指针法。
function removeElements(nums, val) {
let slow = 0;
let fast = 0;
// 快指针遍历数组
while(fast < nums.length) {
if (nums[fast] !== val) {
// 将不等于目标值的值移动到慢指针处
nums[slow] = nums[fast];
// 此时慢指针移动一步
slow++;
}
fast++;
}
return slow;
}