题目
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
题解
这一题可采用基本的二分查找算法求解。只是需要注意下“当目标值不存在于数组中”时要返回应该插入的位置,这个条件。对于这个条件,我是这么判断的。因为最后和target比较的是nums[mid],目标值插入时一定在mid前或后,所以只要再判断下和mid的大小关系就好了,再考虑下mid为边界时的情况就可以了。
代码
class Solution {
public int searchInsert(int[] nums, int target) {
int start = 0,end = nums.length - 1;
int mid = 0;
while(start <= end) {
mid = start + (end - start) / 2;
if(nums[mid] == target) {
return mid;
} else if(nums[mid] > target) {
end = mid -1;
} else {
start = mid + 1;
}
}
mid = (nums[mid] > target) ? mid : mid + 1;
return mid;
}
}