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 }
复制代码

 

posted @   lordshang  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示