考察知识点:二分
题目分析:
由于该序列是升序的,我们每次找到由左边界和右边界确定的中点。当该点比目标值大或等于目标值时,将右边界缩小到中间这个点;当该点比目标值小时,将左边界向右移动到中间的后一个点。
下方给出的代码中l和r总是会在指向同一个数时停止。当目标值存在或者目标值不存在但应插入序列中间某个位置时,结果就是l的值;当目标值不存在需要插入到末尾时,由于r在目标值的左侧,所以需要r + 1才是最终结果。
所用编程语言:C++
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param labels int整型vector * @param target int整型 * @return int整型 */ int searchInsert(vector<int>& labels, int target) { // write code here int size = labels.size(); int l = 0, r = size - 1; if (labels[r] < target) return r + 1; while (l < r) { int mid = l + r >> 1; if (labels[mid] >= target) r = mid; else l = mid + 1; } return l; } };