给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5 输出: 2
示例 2:
输入: [1,3,5,6], 2 输出: 1
示例 3:
输入: [1,3,5,6], 7 输出: 4
示例 4:
输入: [1,3,5,6], 0 输出: 0
//解法一:暴力搜索
int searchInsert(int* nums, int numsSize, int target){
int pos=0;
for(int i=0;i<numsSize;++i)
{
if(nums[i]<target)
{
pos++;
}
else
{
break;
}
}
return pos;
}
//二分法
int searchInsert(int* nums, int numsSize, int target){
if(numsSize==0)return 0;
int left=0,right=numsSize,medium=(left+right)/2;
while(left<medium)
{
if(nums[medium]<target)
{
left=medium;
}
else if (nums[medium]>target)
{
right=medium;
}
else
{
break;
}
medium=(left+right)/2;
}
int pos=right;
if(nums[left]>=target)pos=left;
else if(nums[medium]>=target)pos=medium;
else if(nums[right-1]>=target)pos=right-1;
return pos;
}
暴力搜索:时间复杂度O(n)
执行用时 : 8 ms, 在Search Insert Position的C提交中击败了96.19% 的用户
内存消耗 : 7.4 MB, 在Search Insert Position的C提交中击败了46.48% 的用户
二分法:O(log(n))
执行用时 : 8 ms, 在Search Insert Position的C提交中击败了96.19% 的用户
内存消耗 : 7.3 MB, 在Search Insert Position的C提交中击败了56.54% 的用户