给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 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% 的用户