LeetCode算法题35:搜索插入位置解析

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

猜你喜欢

转载自blog.csdn.net/x603560617/article/details/83500878
今日推荐