LeetCode 35 Search Insert Position (Tag:Array Difficulty:Easy)

332 阅读1分钟

前言

关于 LeetCode 数组类型题目的相关解法,可见LeetCode 数组类型题目做前必看,分类别解法总结了题目,可以用来单项提高。觉得有帮助的话,记得多多点赞关注哦,感谢!

题目描述

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

请必须使用时间复杂度为 O(log n) 的算法。

示例 1:
输入: nums = [1,3,5,6], target = 5
输出: 2

示例 2:
输入: nums = [1,3,5,6], target = 2
输出: 1

示例 3:
输入: nums = [1,3,5,6], target = 7
输出: 4

示例 4:
输入: nums = [1,3,5,6], target = 0
输出: 0

示例 5:
输入: nums = [1], target = 0
输出: 0

链接:leetcode-cn.com/problems/se…

题解

  1. 题目要求 O(logn) 时间复杂度,再配合题目中已排序数组,这两个特征都说明要使用二分搜索的方法来解决本题,再结合模版中 g函数 的作用,即满足条件。时间复杂度 O(logn)
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number}
 */
var searchInsert = function (nums, target) {
  let l = 0;
  let r = nums.length;
  while (l < r) {
    let m = l + Math.floor((r - l) / 2);
    if (nums[m] >= target) {
      r = m;
    } else {
      l = m + 1;
    }
  }
  return l;
};