题目链接:牛客网
题目描述:
给出一个有序的数组和一个目标值,如果数组中存在该目标值,则返回该目标值的下标。如果数组中不存在该目标值,则返回如果将该目标值插入这个数组应该插入的位置的下标
假设数组中没有重复项。
下面给出几个样例:
[1,3,5,6], 5 → 2
[1,3,5,6], 2 → 1
[1,3,5,6], 7 → 4
[1,3,5,6], 0 → 0
解题思路:这道题可以用暴力的思路顺序遍历整个数组,如果A[i]等于target或者大于target则返回i,因为如果A[i]大于target则应该插入在i的位置。如果target是最大的则返回n。
class Solution {
public:
int searchInsert(int A[], int n, int target) {
for(int i=0;i<=n-1;i++){
if(A[i]>=target){
return i;
}
}
return n;
}
};
这道题也可以用二分查找来做。(思路来自牛客网 詆調壹點)
class Solution {
public:
int searchInsert(int A[], int n, int target) {
// 二分查找
int low = 0;
int high = n-1;
while (low <= high) {
int mid = (low + high) / 2;
if(A[mid] == target) return mid;
else if(A[mid] < target) low = mid + 1;
else high = mid - 1;
}
// 没找到返回low,即插入位置
return low;
}
};