分析
-
本题的考点:二分。
-
二分出小于等于
target
的最大的数所在的位置即可。注意这里可能所有的数都小于target
,因此右端点初始为nums.size()
。
代码
- C++
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int l = 0, r = nums.size();
while (l < r) {
int mid = l + r >> 1;
if (nums[mid] >= target) r = mid;
else l = mid + 1;
}
return r;
}
};
- Java
class Solution {
public int searchInsert(int[] nums, int target) {
int l = 0, r = nums.length;
while (l < r) {
int mid = l + r >> 1;
if (nums[mid] >= target) r = mid;
else l = mid + 1;
}
return r;
}
}
时空复杂度分析
-
时间复杂度:$O(log(n)$,
n
为数组长度。 -
空间复杂度:$O(1)$。