4_35.搜索插入位置
题目描述:

解题思路:
- 二分查找法:
对于有序数组的查找目标值,一般使用二分查找法找到其索引。虽然在本题中,对于目标值不存在数组中,会返回其将要被插入的位置,依然能够使用二分查找法。
自己的写法虽然使用了二分查找法,对比了官方解法之后,有两个点需要改进:- 对于取中间值的运算,使用移位操作符。即
(mid = (left + right)/ 2) --> ((mid = (right - left) >> 1) + left)
把加法改成减法,是为了避免溢出,移位是计算机计算移位速度更快。 - 对于返回索引值:
看到官方的解法后,不难分析得出,返回值有以下两种情形:
+ 查找到该target,直接返回索引值即可
+ 未查找到该target,此时退出while循环,一定是因为left == right,因此要插入的位置一定是在该数组之后。
- 对于取中间值的运算,使用移位操作符。即
自己的二分查找代码
class Solution {
public int searchInsert(int[] nums, int target) {
int len = nums.length;
int left = 0;
int right = len - 1;
while (left <= right){
int mid = (left + right) / 2;
if(nums[mid] == target){
return mid;
}else if (nums[mid] < target){
left = mid + 1;
}else {
right = mid - 1;
}
}
return left;
}
}
优化代码
class Solution {
public int searchInsert(int[] nums, int target) {
int n = nums.length;
int left = 0, right = n - 1, ans = n;
while (left <= right) {
int mid = ((right - left) >> 1) + left;
if (target <= nums[mid]) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
}
滴水穿石、燕子衔泥,点点滴滴都是添补

浙公网安备 33010602011771号