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

搜索插入位置--LeetCode

题目

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

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

示例 1:

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

示例 2:

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

示例 3:

  • 输入: [1,3,5,6], 7
  • 输出: 4

示例 4:

  • 输入: [1,3,5,6], 0
  • 输出: 0
class Solution {public int searchInsert(int[] nums, int target) {int i = 0;// 初始化变量 i 为 0,i 表示二分查找的左边界int j = nums.length - 1;// 初始化变量 j 为数组 nums 的最后一个元素的索引,j 表示二分查找的右边界int m;// 声明变量 m,用于存储二分查找过程中的中间位置while (j < nums.length && i <= j) {// 开始一个 while 循环,循环条件为 j 小于数组长度且 i 小于等于 j// 只要满足这个条件,就会继续执行二分查找m = i + (j - i) / 2;// 计算中间位置 m,使用 i + (j - i) / 2 而不是 (i + j) / 2 是为了避免整数溢出if (nums[m] == target) {// 如果中间位置的元素等于目标值 targetreturn m;// 则返回中间位置 m,因为已经找到了目标值} else if (nums[m] > target) {// 如果中间位置的元素大于目标值 targetj = m - 1;// 则将右边界 j 更新为 m - 1,缩小查找范围到左半部分} else {// 如果中间位置的元素小于目标值 targeti = m + 1;// 则将左边界 i 更新为 m + 1,缩小查找范围到右半部分}}return j + 1;// 当循环结束时,说明没有找到目标值// 返回 j + 1,这是目标值应该插入的位置}
}

注意:

在计算二分法的中间值middle时,要使用 i + (j - i) / 2 而不是 (i + j) / 2 是为了避免整数溢出

http://www.xdnf.cn/news/17083.html

相关文章:

  • Linux中find和grep的区别
  • 常见但是有挑战的效果组件鸿蒙版
  • 视频分析设备平台EasyCVR化解高速服务区管理难题,打造全方位智能安防监控方案
  • 第 5 期(进阶版):训练第一个 DDPM 模型(使用 CIFAR-10 数据集)
  • 服务器上有conda环境 退出conda环境 再安装uv包管理器这样子就不会有冲突吗
  • MQ基础篇
  • LoRA(Low - Rank Adaptation,低秩自适应 )微调技术改进创新点
  • 并发设计模式实战系列(1):半同步/半异步模式
  • day45——非递减数列(LeetCode-665)
  • QT项目打包
  • Multi Agents Collaboration OS:文档合规性及质量检测助手设计及实践
  • 【KWDB 创作者计划】_算法篇---Stockwell变换
  • OpenAI重返巅峰:o3与o4-mini引领AI推理新时代
  • 面试经验杂谈
  • onlyoffice关闭JWT后依然报错如何解决?
  • Maven 简介(图文)
  • 文件系统的npu和内核的npu有什么区别
  • 双层Key缓存
  • 【dify实战】agent结合deepseek实现基于自然语言的数据库问答、Echarts可视化展示、Excel报表下载
  • 数据结构--并查集-高效处理连通性问题
  • windows测试
  • Android 13 关闭屏幕调节音量大小
  • LabVIEW油气井井下集成监测系统
  • 神经网络优化 - 小批量梯度下降
  • 消防营区管控:从智能仓储、装备管理、应急物资调用等多维度出发
  • 每日一题(8) 求解矩阵最小路径和问题
  • android的配置检查 查看安卓设备配置
  • LeetCode:DFS综合练习
  • 在服务器上安装redis
  • Kaamel隐私与安全分析报告:Apple Intelligence隐私保护机制