题目35:搜索插入位置
实现代码如下,使用二分查找法完成。
int searchInsert(int* nums, int numsSize, int target) {
int left = 0, right = numsSize - 1, ans = numsSize;
while (left <= right) {
int mid = ((right - left) >> 1) + left;
if (target <= nums[mid]) {
ans = mid;
right = mid - 1;
} else {
left = mid + 1;
}
}
return ans;
}
值得关注的代码语句为
int mid = ((right - left) >> 1) + left;
int 型数据的取值范围,有最大值 MAX 和最小值 MIN;left 和 right 满足范围;但是 left + right 不一定小于 MAX 有可能导致数值溢出。
所以先将上述代码改写为
int mid = ((right + left)/2;
避免数值溢出, 然后由于位运算更加快速,使用右移一位操作代替数据的除以2操作
int mid = ((right - left) >> 1) + left;