题目地址:
https://leetcode.com/problems/search-insert-position/
给定一个非空长 n n n数组 a a a,其各个数不相同,再给定一个数 x x x,如果 x x x存在则返回其下标,否则返回其应该插在的位置的下标。
题意可以理解为,找到数组中从左往右第一个大于等于target的数。如果没找到,就返回数组长度。可以用二分法。代码如下:
class Solution {
public:
int searchInsert(vector<int>& a, int x) {
int l = 0, r = a.size() - 1;
while (l < r) {
int mid = l + (r - l >> 1);
if (a[mid] >= x)
r = mid;
else
l = mid + 1;
}
return a[l] >= x ? l : a.size();
}
};
时间复杂度 O ( log n ) O(\log n) O(logn),空间 O ( 1 ) O(1) O(1)。