Problem: 35. 搜索插入位置
思路
二分法
解题方法
- 二分法(左闭右闭)
- 二分法(左闭右开)
复杂度
- 时间复杂度:
O ( log n ) O(\log n) O(logn)
- 空间复杂度:
O ( 1 ) O(1) O(1)
Code
//二分法(左闭右闭)
class Solution {
public int searchInsert(int[] nums, int target) {
int length = nums.length;
int left = 0, right = length - 1;
int mid = -1;
while(left <= right){
mid = left + (right -left)/2;
if(target == nums[mid]){
return mid;
}else if(nums[mid] > target){
right = mid - 1;
}else{
left = mid + 1;
}
}
//分四种情况插入
// 目标值插入数组所有元素之前.,因为是左闭右闭,[],return right +
// 目标值等于mid return mid
// 目标值插入数组中的位置,因为是左闭右闭,[],return right + 1
// 目标值插入数组所有元素之后,因为是左闭右闭,[],return right + 1
return right + 1;
}
}
//二分法(左闭右开)
class Solution {
public int searchInsert(int[] nums, int target) {
int length = nums.length;
int left = 0, right = length;
int mid = -1;
while(left < right){
mid = left + (right -left)/2;
if(target == nums[mid]){
return mid;
}else if(nums[mid] > target){
right = mid;
}else{
left = mid + 1;
}
}
//分四种情况插入
// 目标值插入数组所有元素之前.,因为是左闭右开,[),return right
// 目标值等于mid return mid
// 目标值插入数组中的位置,因为是左闭右开,[),return right
// 目标值插入数组所有元素之后,因为是左闭右闭,[),return right
return right;
}
}