LeetCode35搜索插入位置

题目:

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

你可以假设在数组中无重复元素。

分析:

二分搜索,查找到返回当前数字索引,查找不到返回它插入后的位置索引。就是在普通的二分搜索基础上,插入一个判断,当查找到最后一个数字时,如果查找到数字就返回当前索引,如果查找不到当前数字则判断一下和最后查找的数字的大小,返回相应的位置。

代码:

class Solution {
    public int searchInsert(int[] nums, int target) {
        if (nums.length == 0)//数组为空时直接返回0;
            return 0;
        if (target > nums[nums.length-1])//如果所给数字大于最后的数字直接返回为长度;
            return nums.length;
        if (target < nums[0])//如果所给数字小于第一个直接返回0;
            return 0;
        return search(nums,0,nums.length-1,target);//其他情况 二分搜索递归调用
    }
    
    //二分搜索
    public static int search(int[] nums, int begin, int end, int target){

        if (begin >= end && target != nums[begin]) //查找不到的情况
            if (target > nums[end])//如果比查找的当前数字大,返回为当前数字索引+1
                return end + 1;
            else//查找的数字比当前数字小,返货为当前数字索引
                return end;

        //二分搜索
        int mid = (begin+end)/2;
        if (target == nums[mid])
            return mid;
        else if (target > nums[mid])
            return search(nums, mid+1 , end, target);
        else
            return search(nums, begin, mid-1, target);
    }
}

你可能感兴趣的:(算法)