给定一个排序数组一个目标值

  1. 在数组中找到目标值,并返回其索引
  2. 如果目标值不存在于数组中,返回它将会按顺序插入的位置

eg:输入[1,3,5,6],5
输出:2

输入[1,3,5,6],2
输出:1

输入[1,3,5,6],7
输出:4

方法1:for循环遍历;
时间复杂度:O(n)

function findTheInsert(arr, value) {
    for (let i = 0; i < arr.length; i++) {
        if (arr[i] >= value) {
            return i
        }
    }
    return arr.length
}

let arr = [1, 3, 5, 6]
let value1 = 2
console.log(findTheInsert(arr, value1))

方法2:二分查找;
时间复杂度:O(logn)

function binarySearch(arr, value) {
    let minIndex = 0
    let maxIndex = arr.length - 1
    let middleValue

    while (minIndex <= maxIndex) {
        let middleIndex = Math.floor((minIndex + maxIndex) / 2)
        middleValue = arr[middleIndex]
        if (value < middleValue) {
            maxIndex = middleIndex - 1
        } else if (value > middleValue) {
            minIndex = middleIndex + 1
        } else {
            return middleIndex
        }
    }

    return minIndex
}

let arr = [1, 3, 5, 6]
let value1 = 2
console.log(binarySearch(arr, value1))

corn6
4 声望0 粉丝

寻找自我Corn6