【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

 

【解答】

  • 解法一:遍历
class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        if target in nums: #如果target存在于nums中
            return nums.index(target)
        elif target < nums[0]: #如果target比数组第一个元素小
            return 0
        elif target > nums[-1]: #如果target比数组最后一个元素大
            return len(nums)
        else:
            for i in range(len(nums)-1):
                if nums[i] < target and nums[i+1] > target:
                    return i+1

  执行用时:54ms

 

  • 解法二:二分法
class Solution:
    def searchInsert(self, nums: List[int], target: int) -> int:
        size=len(nums)
        #特判1
        if size==0: 
            return 0
        #特判2:如果target大于最后一个元素
        if nums[-1]<target:
            return size
        left=0
        right=size-1
        #二分法逻辑判断
        while left<right:
            mid=left+(right-left)//2 #mid=(left+right)//2 但是(left+right)可能会整型溢出,故换一种写法
            if nums[mid]<target:
                left=mid+1
            else:
                assert nums[mid] >= target
                right=mid
        return left

  执行用时:86ms

 

 

posted @ 2019-12-03 15:37  Xxx1206  阅读(160)  评论(0)    收藏  举报