当前位置: 首页 > news >正文

搜索插入位置(js实现,LeetCode:35)

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

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

提示:

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

思路:如果题目没有限制时间复杂度的话,那么用for循环可以很简单的实现,由于该题目需要的时间复杂度为O(log n)所以这里使用二分查找,二分查找分别有递归和迭代两种方式,这里使用迭代来实现

二分查找的核心变量有三个:left指针、right指针和mid(middle)指针,每次将target与数组中间项(Arr[mid])作比较,target大于Arr[mid],将left指针右移至mid位置,重新计算mid指针位置target小于Arr[mid],将right指针左移至mid位置,重新计算mid指针位置

mid=Math.floor(left+(right-left)/2)

下面附上实现代码

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

相关文章:

  • 微信小程序文件存储和获取的详细方案
  • ⭐LeetCode周赛 Q1. 找出最大的几近缺失整数——模拟⭐
  • 网络安全之命令
  • RabbitMq--消息可靠性
  • 【病毒分析】熊猫烧香病毒分析及其查杀修复
  • <3D建模>.max文件转换为.fbx文件
  • Linux NFS/TFTP文件系统挂载
  • okhttp源码解析
  • OkHttp3 详解及开发实例—官方原版(二)
  • 【WPF】Slider滑动方法(INotifyPropertyChanged、ValueChanged )响应速度对比分析
  • Nest.js全栈开发终极实践:TypeORM+微服务+Docker构建高可用企业级应用
  • vue3学习-3(逻辑复用)
  • 边缘计算的业务种类划分
  • tcc编译器教程6 进一步学习编译gmake源代码
  • ‌Visual Studio Code(VS Code)支持的编程语言
  • C#里最快添加log4net的日志输出
  • scala的集合
  • ROS实践(二)构建Gazebo机器人模型文件urdf
  • PgSql 操作技巧
  • 做到哪一步才算精通SQL
  • 财政部:今年将和住建部选拔第二批20个城市,高质量推进城市更新行动
  • 特朗普与普京开始进行电话会谈,稍后还将致电泽连斯基
  • 周国辉谈花开岭现象 :年轻的公益人正在用行动点亮希望
  • 贯彻落实《生态环境保护督察工作条例》,充分发挥生态环境保护督察利剑作用
  • 大学2025丨专访西湖大学副校长邓力:如何才能培养“不惧未知”的创新者
  • 专利申请全球领先!去年我国卫星导航与位置服务产值超5700亿元