给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。请必须使用时间复杂度为 O(log n) 的算法。
int a = numsSize/2;
if(target < nums[0]){
return 0;
}else if(target > nums[numsSize-1]){
return numsSize;
}
while(nums[a] != target && a != numsSize && a!= 0){
if(nums[a-1] < target && nums[a+1] > target){
if(nums[a] > target){
return a;
}else if(nums[a]<target){
return a+1;
}
}
else if(nums[a] > target){
a /= 2;
}else if(nums[a] < target){
a = (numsSize+a)/2;
}
}
return a;
}
你只需要使用一个for循环进行查找就行了。没必要这么复杂啊。
如果找到比数值大的就直接返回当前索引。若整个数组都没有找到。则返回数组长度
题主的意思就是要使用二分查找,建议题主先熟悉一下二分查找的原理
建议看这篇中的两种实现方式中的非递归(循环):
https://blog.csdn.net/luoweifu/article/details/16656737