35 - 搜索插入位置 - python

207 阅读1分钟

给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

你可以假设数组中无重复元素。

示例 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

给定一个无重复元素的排序数组,题目要求找到能插入target的位置索引。

  • 暴力搜索 :一种最为简单直观的方法,但是时间复杂度为 O ( n ) O(n) O(n)。

    • 如果target在数组中存在,直接返回它在数组中的索引即可
    • 如果它在数组中不存在,则找到第一个大于它的元素的索引
    • 如果数组中元素皆小于target,则直接返回数组的长度
class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
    	if nums == []: return None
    	
        if target in nums:
            return nums.index(target)

        if nums == []:
            return None

        for i in range(len(nums)):
            if nums[i] > target:
                return i

        return len(nums)
  • 二分查找:时间复杂度为 O ( log ⁡ n ) O(\log n) O(logn):

    • 如果元素位于数组中,则返回mid表示的索引
    • 如果元素不在数组中,则返回left表示的索引
class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        if nums == []: return None

        l = 0
        r = len(nums) - 1
        while l <= r:
            mid = (l + r) // 2
            if nums[mid] == target:
                return mid
            elif nums[mid] > target:
                r = mid - 1
            else:
                l = mid + 1

        return l