题目
题目来源
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。
思路
找出处于两者之间的位置即可(属于是送分题了就是)
相关思考
本以为已经是比较简洁的代码了,结果一看评论区,感觉自己还是要继续努力啊
评论区的代码直接通过target<=num[i]进行筛选,所以i之前的数字必然小于target,而第i个数大于等于。该数若等于target,则找到了该位置;若大于,说明target要插于这个位置,实现前面一个数小于target而后面一个数大于target的条件。另外仅剩的一种情况即为,target比任何一个数组中的数都要大,此时在数组原有0~length-1的基础上,再加一位,即返回length
代码(C++/原创)
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int len=nums.size();
if(target<nums[0]) return 0;
else if(target>nums[len-1]) return len;
else if(target==nums[len-1]) return len-1;
for(int i=0;i<len-1;i++)
{
if(target>=nums[i] && target<nums[i+1])
{
if(target==nums[i])
return i;
else
return i+1;
}
}
return 0;
}
};
代码(C++/力扣)
public int searchInsert(int[] nums, int target) {
for(int i = 0; i < nums.length;i++){
if(nums[i] >= target){
return i;
}
}
return nums.length;
}