给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例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
这个题给了比较容易的条件,测试样例没有重复元素,而且是排序数组。那么思路就很好想了,首先肯定是要遍历的,所以时间复杂度最少也得是O(n),而且这种题也就是这个复杂度了。遍历的过程如果遇到target就返回索引,如果不等于target则判断一下是否大于当前值并小于等于下一个值,如果是则返回下一值的索引。最后如果遍历完之后还没有返回,那说明只有两种情况没有在遍历中进行判断,要么target小于第一个值,要么大于最后一个值,所以在程序开头先判断是否小于等于第一个值,如果是就返回0索引。然后遍历完之后直接返回数组长度即可,因为程序如果可以运行到这里那么一定是大于最大的那个数。
C++源代码:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int len = nums.size();
if (target<=nums[0])
return 0;
for (int i=0;i<len-1;i++)
{
if (nums[i]==target)
return i;
if (target>nums[i] && target<=nums[i+1])
return i+1;
}
return len;
}
};
python3源代码:
class Solution:
def searchInsert(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
leng = len(nums)
if target <= nums[0]:
return 0
for i in range(leng-1):
if target == nums[i]:
return i
if target > nums[i] and target <= nums[i+1]:
return i+1
return leng