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

122 阅读1分钟

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;
}