SOURCE

// 数值算法

// 二分查找 half seaarch,O(n)
function half(nums, target) {
    const len = nums.length
    let left = 0, right = len - 1
    while(left < right) {
        const mid = left + ((right - left) >> 1);
        if(nums[mid] > target) {
            right = mid
        } else if(nums[mid] < target) {
            left = mid + 1
        } else {
            return mid
        }
    }
    return -1
}
// console.log(half([1,3,5,6,7], 5))

// 原地删除指定元素 (双指针),O(n)
function del(nums, el) {
    let slow = 0, fast = 0
    for(let fast = 0; fast < nums.length; fast++) {
        if(nums[fast] !== el) {
            nums[slow++] = nums[fast]
        }
    }
    return slow
}
// console.log(del([3,5,3,5,6], 3))

// 有序数组的平方 (双指针),O(n)
function sort(nums) {
    const len = nums.length
    let i = 0, j = len -1, k = len -1
    let res= []
    while(i <= j) {
        if(nums[i] * nums[i] >= nums[j] * nums[j]) {
            res[k--] = nums[i] * nums[i]
            i++
        }
        if(nums[i] * nums[i] < nums[j] * nums[j]) {
            res[k--] = nums[j] * nums[j]
            j--
        }
    }
    return res
}
// console.log(sort([-3,-1,0,3,5,6]))

// 长度最小的子数组(滑动窗口)
function slide(nums, s) {
    const len = nums.length
    let i = 0, sum = 0, res = len

    for(let j = 0; j < len; j++) {
        sum += nums[j]
        while(sum >= s) {
            const sublen = j- i + 1
            res = res > sublen ? sublen : res
            sum -= nums[i++]
        }
    }
    return res
}
// console.log(slide([3,1,0,3,5,7], 13))
console 命令行工具 X clear

                    
>
console