- 题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。
来源:LeetCode
- 示例
- 示例 1:
输入: [1,3,5,6], 5
输出: 2 - 示例 2:
输入: [1,3,5,6], 2
输出: 1 - 示例 3:
输入: [1,3,5,6], 7
输出: 4 - 示例 4:
输入: [1,3,5,6], 0
输出: 0
- 思路分析
- JAVA实现
class Solution {
public int searchInsert(int[] nums, int target) {
int len = nums.length;
if(len==0) return 0;
int start = 0, end = len-1;
return binarySearch(nums, target, start, end);
}
public int binarySearch(int[] nums, int target, int start, int end) {
if(start<=end) {
int mid = (start+end)/2;
if(nums[mid] == target) return mid;
else {
if(start == end) { //只剩下一个数的情况
if(nums[start]>target) return start==0 ? 0 : start;
else return start+1;
}
else {
if(nums[mid]>target) {
int res = binarySearch(nums, target, start, mid-1);
if(res==0) {//说明也是只有这一个数
return binarySearch(nums,target,start, start);
}
else return res;
}
else {
int res = binarySearch(nums, target, mid+1,end);
if(res == 0) return binarySearch(nums, target,end, end);
else return res;
}
}
}
}
else return 0;
}
}