描述
给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。
你可以假设在数组中无重复元素。
您在真实的面试中是否遇到过这个题?
是
样例
[1,3,5,6],5 → 2
[1,3,5,6],2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6],0 → 0
挑战
O(log(n)) time
要完成挑战的目标可以采用二分法:
class Solution {
public:
/**
* @param A: an integer sorted array
* @param target: an integer to be inserted
* @return: An integer
*/
int searchInsert(vector<int> &A, int target) {
// write your code here
int left = 0;
int right = A.size() - 1;
int mid = (right + left) / 2;
while (left <= right) {
if (A[mid] == target) {
return mid;
} else if (A[mid] > target) {
right = mid - 1;
mid = (right + left) / 2;
} else {
left = mid + 1;
mid = (right + left) / 2;
}
}
A.insert(A.begin() + left, target);
return left;
}
};