Java实现 LeetCode 35 搜索插入位置(解法详解)

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

二分查找的 leftmost 解法

class Solution {
    
    
    public int searchInsert(int[] nums, int target) {
    
    
        int i = 0,j = nums.length - 1;
        while(i <= j){
    
    
        int m = (i + j) >>> 1;
        if(target <= nums[m]){
    
    
            j = m - 1;
        }else{
    
    
            i = m + 1;
        }
    }
    return i;
    }
}
  • 初始化左右指针 i j,分别指向数组的首端和末端
  • 使用位运算 >>> 1 来实现除以2的操作,防止 right + left 超出 int 的范围
  • i <= j时进入循环。计算中间索引 m,通过将左右指针相加后除以2获得。如果目标值小于或等于中间元素,则更新右指针 jm - 1。否则,更新左指针 im + 1
  • i > j 时结束循环。返回左指针 i 的值,即为目标值应该插入的位置

猜你喜欢

转载自blog.csdn.net/weixin_61370021/article/details/131535401