leetcode 35题

Posted by franki on June 9, 2021

leetcode 35题 搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例1

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

示例2

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

思路

二分搜索 找到最后一个小于target的值

代码

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function(nums, target) {
    let low = 0, high = nums.length - 1;
    while (low <= high) {
        const mid = (high - low) / 2 | 0 + low; 
        if (nums[mid] >= target) {
            high = mid - 1;
        } else {
            if (mid === nums.length - 1 || nums[mid + 1] >= target) {
                return mid + 1;
            }
            low = mid + 1;
        }
    }
    return 0;
};

复杂度分析:

  • 时间复杂度: O(logN)
  • 空间复杂度:O(1)