35. 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
二分查找都写得这么繁杂,服了啊
我的解法~能通过的屎
class Solution {
public int searchInsert(int[] nums, int target) {
int l = 0;
int r = nums.length;
int mid = (l + r) / 2;
while (l <= r) {
if(mid >= nums.length){
return nums.length;
}
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
l = mid + 1;
mid = (l + r) / 2;
} else {
r = mid - 1;
mid = (l + r) / 2;
}
}
return l;
}
}
比较标准的写法,l + (r - l) / 2;而不是(l+r)/2为了防止特别大的数 l+r 直接溢出了
class Solution {
public int searchInsert(int[] nums, int target) {
int l = 0;
int r = nums.length-1;
while (l <= r) {
int mid = l + (r - l) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
l = mid + 1;
} else {
r = mid -1 ;
}
}
return l;
}
}