*
* 请必须使用时间复杂度为 O(log n) 的算法。
*
输入: nums = [1,3,5,6], target = 5
输出: 2
输入: nums = [1,3,5,6], target = 2
输出: 1
输入: nums = [1,3,5,6], target = 7
输出: 4
输入: nums = [1,3,5,6], target = 0
输出: 0
输入: nums = [1], target = 0
输出: 0
public class SearchInsertLocation {
public static int searchInsert(int[] nums, int target) {
int left = 0;
int right = nums.length - 1;
while(left <= right){
int mid = left + (right - left ) / 2;
if(nums[mid] == target){
return mid;
}else if(nums[mid] <target){
left = mid + 1;
}else{
right = mid - 1;
}
}
left = 0;
right = nums.length - 1;
//没找到啊,走下边吧,插入
if(nums[right]<target){
return right+1;
}
if(nums[left]>target){
return 0;
}
while(left <= right){
int mid = left + (right - left ) / 2;
if((mid-1>-1)&&nums[mid-1]<target &&nums[mid]>target){
return mid;
}else if((mid+1<=right)&&nums[mid]<target &&nums[mid+1]>target){
return mid+1;
}else if(nums[mid]<target ){
left = mid+1;
}else if(nums[mid]>target) {
right = mid-1;
}
}
return -1;
}
public static void main(String[] args) {
int arr[] = {1,3,5,6};
int i = searchInsert(arr, 2);
System.out.println(i);
}
}