二分搜索-搜索插入位置

85 阅读1分钟

35. 搜索插入位置

描述

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

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

分析

典型的二分查找的题目,附加任务:若找不到该元素,则查找该元素,应该所属的位置,并返回对应下标。

解法(使用左闭右闭的形式)

  1. 初始化left=0,right=array.length-1,寻找数组中值为target的元素,并返回下标
  2. 循环逻辑
     若a[mid]==target ,return mid.
     若a[mid]<target,说明应该去mid的左区间寻找,故right=mid-1.
     若a[mid]>target,说明应该去mid的右区间寻找,故left=mid+1

3.若过程中找到target,直接返回index即可;若没有,退出循环后,left的取值就是target的所属index,最后直接返回left即可。

###代码


class Solution {
    public int searchInsert(int[] nums, int target) {
        int left=0;
        int right=nums.length-1;

        int mid;
        while(left<=right){
            mid=(left+right)/2;
            
            if(nums[mid]==target){
                return mid;
            }
            if(nums[mid]>target){
                right=mid-1;
            }else {
              left=mid+1;  
            }

        }
        return left;
    }
}

总结:

 题目虽简,平常对待。