题目:
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.
[1,3,5,6]
, 5 → 2
[1,3,5,6]
, 2 → 1
[1,3,5,6]
, 7 → 4
[1,3,5,6]
, 0 → 0
题意:
给一个从小到大排好序的数组和一个目标值,要求如果数组中存在该目标值的话就返回其下标,否则返回按升序插入后的位置下标。
我的思路是二分查找,之后判断nums[l]与target的关系,假如target大于nums[l],说明应该插入到 l 的右边,否则插入到其左边。
代码如下:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int l = 0, r = nums.size() - 1;
while (l < r) {
int mid = (l + r) / 2;
if (nums[mid] == target)
return mid;
if (nums[mid] > target) {
r = mid;
}
else {
l = mid + 1;
}
}
return l + (nums[l] < target ? 1 : 0);
}
};