力扣算法题:搜索插入位置

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
请必须使用时间复杂度为 O(log n) 的算法。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-insert-position

class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
            if target in nums:
                return nums.index(target)      
            elif target <= nums[0]:
                return 0
            elif target >=nums[-1]:
                return len(nums)
            else:
                for i  in range(len(nums)):
                    if target > nums[i] and target < nums[i+1] and i <=len(nums)-1:
                        return i+1


力扣算法题:搜索插入位置_第1张图片
我以为这样各种判断性能会很差,没想到结果还说的过去,但是时间复杂度不是O(logn),按我自己的理解,这个需要使用二分查找算法才会使得时间复杂度为O(logn),就是使用目标数据和数组中处在中间位置的数进行对比,如果比中间数小,那就只在开始数和中间数之前的这段数之间插入,中间数后面的数就不用去考虑了,如果比中间数大,那就只考虑中间数和结束数之前的这段,中间数前面的数就不用去考虑了,就是当前需要考虑的数组长度是原来的一半,接着再重复去对比,每次都会折半,如果数组很长,这样做是很有意义的,能够提高性能,不知道这样理解是否正确。
最后的if判断可以写成nums[i]

你可能感兴趣的:(算法,python)