当前位置: 首页 > 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
};

http://www.dtcms.com/a/61706.html

相关文章:

  • 微信小程序文件存储和获取的详细方案
  • ⭐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
  • WordPress使用(3)
  • kali linux web扫描工具
  • 第七章:go 切片、空接口来存储任意类型的数据
  • 【redis】string类型相关操作:SET、GET、MSET、MGET、SETNX、SETEX、PSETEX
  • 1-001:MySQL的存储引擎有哪些?它们之间有什么区别?
  • doris:阿里云 MaxCompute
  • 菜鸟开发之MySQL常见字段值处理
  • 代码社区开源协议
  • QWEN2.5_0.5 微调生成文件目录
  • 重构及封装