题面
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
示例 1:
输入: nums = [1,3,5,6], target = 5 输出: 2
示例 2:
输入: nums = [1,3,5,6], target = 2 输出: 1
示例 3:
输入: nums = [1,3,5,6], target = 7 输出: 4
提示:
1 <= nums.length <= 104-104 <= nums[i] <= 104nums为 无重复元素 的 升序 排列数组-104 <= target <= 104
分析
-
很简单的二分查找,需要注意的点是循环判断条件中是否可以取等号;如何更新 left 或 right;最终如果没有找到 target 应该插入到哪里
-
代码如下
class Solution { public: int searchInsert(vector<int>& nums, int target) { int left = 0, right = nums.size() - 1, mid = 0; while (left <= right) { mid = left + (right - left) / 2; if (nums[mid] < target) { left = mid + 1; } else if (nums[mid] > target) { right = mid - 1; } else { return mid; } } return nums[mid] < target ? mid + 1 : mid; } };
这篇文档有帮助吗?