35. 搜索插入位置

题目描述

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

请必须使用时间复杂度为 O(log n) 的算法

方法 二分查找

如果存在目标值,直接返回

否则一直搜索,最后返回leftindex。

如果最后mid大于目标值,right为mid-1,此时插入位置为left;
如果mid小于目标值,left为mid+1,此时插入位置为left。

代码

package easy.搜索插入位置35;

class Solution {
    public int searchInsert(int[] nums, int target) {
        int n = nums.length;
        int left = 0;
        int right = n - 1;
        while (left <= right) {
            int mid = ((right - left) >> 1) + left;
            if(target <= nums[mid]) {
                right = mid - 1;
            } else {
                left = mid + 1;
            }
            
        }
        return left;
    }
}