JS 刷 Leetcode:035. 搜索插入位置

简介: JS 刷 Leetcode:035. 搜索插入位置

1. 题目

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

请必须使用时间复杂度为 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
  • 提示:

    • 1 <= nums.length <= 104
    • -104 <= nums[i] <= 104
    • nums 为无重复元素的升序排列数组
    • -104 <= target <= 104

2. 二分法解

解题思路:题干中有明确说用请必须使用时间复杂度为 O(log n) 的算法,如果用循环遍历数组就是O(n)了,肯定那不行,而在有序数组的查找中 O(logn)的时间复杂度 最先想到的当然是二分查找法了。

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

我们以nums = [1,3,5,6], target = 7为例

  • 第一次循环: left=0 right=3 mid=1 nums[mid]=3<7
  • 第二次循环: left=2 right=3 mid=2 nums[mid]=5<7
  • 第三次循环: left=3 right=3 mid=3 nums[mid]=6<7
  • 第四次循环: left=4 right=3 left > right 跳出循环 没找到返回left

image.png

相关文章
|
5月前
|
JavaScript 前端开发
JS如何配合input框实现模糊搜索
JS如何配合input框实现模糊搜索
171 2
|
1月前
|
人工智能 JavaScript 网络安全
ToB项目身份认证AD集成(三完):利用ldap.js实现与windows AD对接实现用户搜索、认证、密码修改等功能 - 以及针对中文转义问题的补丁方法
本文详细介绍了如何使用 `ldapjs` 库在 Node.js 中实现与 Windows AD 的交互,包括用户搜索、身份验证、密码修改和重置等功能。通过创建 `LdapService` 类,提供了与 AD 服务器通信的完整解决方案,同时解决了中文字段在 LDAP 操作中被转义的问题。
|
1月前
|
算法 索引
LeetCode(搜索插入位置)
如何使用二分查找算法来解决LeetCode上的“搜索插入位置”问题,确保时间复杂度为O(log n),并提供了详细的代码实现和分析。
15 2
|
1月前
|
索引
Leetcode第三十三题(搜索旋转排序数组)
这篇文章介绍了解决LeetCode第33题“搜索旋转排序数组”的方法,该问题要求在旋转过的升序数组中找到给定目标值的索引,如果存在则返回索引,否则返回-1,文章提供了一个时间复杂度为O(logn)的二分搜索算法实现。
19 0
Leetcode第三十三题(搜索旋转排序数组)
|
1月前
【LeetCode 39】700.二叉搜索树中的搜索
【LeetCode 39】700.二叉搜索树中的搜索
16 0
|
3月前
|
算法
LeetCode第81题搜索旋转排序数组 II
文章讲解了LeetCode第81题"搜索旋转排序数组 II"的解法,通过二分查找算法并加入去重逻辑来解决在旋转且含有重复元素的数组中搜索特定值的问题。
LeetCode第81题搜索旋转排序数组 II
|
3月前
|
JavaScript 数据安全/隐私保护 Python
网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
网易云音乐搜索接口JS逆向: Params、encSecKey加密和AES实战
194 4
|
3月前
|
算法
LeetCode第74题搜索二维矩阵
文章讲解了LeetCode第74题"搜索二维矩阵"的解决方案,利用二分搜索法将问题简化,并通过数学转换找到二维矩阵中的对应元素,展示了将二维问题转化为一维问题的解题技巧。
LeetCode第74题搜索二维矩阵
|
3月前
|
算法
LeetCode第35题搜索插入位置
这篇文章介绍了LeetCode第35题"搜索插入位置"的解题方法,通过使用二分查找法,高效地找到在有序数组中插入一个目标数的最佳位置。
LeetCode第35题搜索插入位置
|
3月前
|
算法
LeetCode第33题搜索旋转排序数组
这篇文章介绍了LeetCode第33题"搜索旋转排序数组"的解题方法,通过使用二分查找法并根据数组的有序性质调整搜索范围,实现了时间复杂度为O(log n)的高效搜索算法。
LeetCode第33题搜索旋转排序数组
下一篇
无影云桌面