注意这里的要求是时间复杂度是O(n)
{
//同时搜索他顺序存储的位置以及是否有这个值
int sort=0;
int i=0;
int flag=0;//如果为0,表示没有出现相同的值,并且需要插入的是第一位
for( i=0;i<numsSize;i++)
{
if(nums[i]<target)
{
sort=i;//持续记录顺序的位置
if(i==0)
flag=1;//证明已经搜过了第一位,并且插入的不是第一位
}
if(nums[i]==target)
{
//相等直接退出
sort=i;
break;
}
}
if(i==numsSize&&nums[sort]!=target)
//证明没有相同的值并且已经搜完了整个数组
{
if(flag==0)
return sort;//需要插入的是第一位
else
return sort+1;//需要出入的是这一位的下一个位置
}
else
return sort;//找到了,返回这个位置
}
对于高手想到的就是二分查找的算法
int searchInsert(int* nums, int numsSize, int target)
{
//使用二分查找,找到最后一个大于等于target的值,
int ans=numsSize;//如果target的值比他们的任何一格都要大,那么返回最后的数组长度进行插入,刚好就是数组的长度
int left=0,right=numsSize-1;
while(left<=right)
{
int mid=(left+right)/2;
if(target<=nums[mid])
{
ans=mid;//持续记录顺序的位置
right=mid-1;
}
else
left=mid+1;
}
return ans;//最后
}
这个题最关键的就是返回最后一个记录的位置:nums[pos-1]<target<=nums[pos]