题目:
给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。
你可以假设在数组中无重复元素。
分析:
二分搜索,查找到返回当前数字索引,查找不到返回它插入后的位置索引。就是在普通的二分搜索基础上,插入一个判断,当查找到最后一个数字时,如果查找到数字就返回当前索引,如果查找不到当前数字则判断一下和最后查找的数字的大小,返回相应的位置。
代码:
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);
}
}