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 class Solution { 2 /** 3 * 使用二分查找算法在有序数组中寻找目标值的索引位置 4 * 如果目标值存在于数组中,则返回其索引位置 5 * 如果目标值不存在于数组中,则返回按插入顺序应插入的目标值的索引位置 6 * 7 * @param nums 一个有序的整数数组 8 * @param target 需要查找的目标值 9 * @return 目标值的索引位置或应插入的位置 10 */ 11 public int searchInsert(int[] nums, int target) { 12 // 初始化左右指针,分别指向数组的起始和结束位置 13 int left = 0, right = nums.length - 1; 14 15 // 当左指针不大于右指针时,执行二分查找 16 while (left <= right) { 17 // 计算中间位置,避免整数溢出的风险 18 int mid = (left + right) / 2; 19 20 // 如果中间位置的值等于目标值,直接返回中间位置 21 if (nums[mid] == target) { 22 return mid; 23 } else if (nums[mid] < target) { 24 // 如果中间位置的值小于目标值,调整左指针到中间位置的右侧 25 left = mid + 1; 26 } else { 27 // 如果中间位置的值大于目标值,调整右指针到中间位置的左侧 28 right = mid - 1; 29 } 30 } 31 32 // 如果没有找到目标值,返回按插入顺序应插入的目标值的索引位置 33 return left; 34 } 35 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App