Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0
Java
方法一
直接二分查找,若找到即返回下标,若最终未找到,则根据最后找到的数字与target的大小关系返回应该插入的位置。耗时7ms,效率排在9/10。。。。
看了下效率最高的答案,用的也是二分查找,就是在未找到的情况下没有进一步的判断,而是直接返回left,不明白为什么耗时只有5ms。。
public class Solution {
public int searchInsert(int[] nums, int target) {
if(nums.length == 0){
return 0;
}
int mid = 0;
int left = 0;
int right = nums.length - 1;
while(left <= right){
mid = (left + right) / 2;
if(nums[mid] == target){
return mid;
}else if(nums[mid] > target){
right = mid - 1;
}else{
left = mid + 1;
}
}
if(nums[mid] > target){
return mid;
}else{
return mid + 1;
}
}
}