Leetcode035 search-insert-position

搜索插入位置

题目描述:

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

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

示例1

输入: [1,3,5,6], 5
输出: 2

示例2

输入: [1,3,5,6], 2
输出: 1

示例3

输入: [1,3,5,6], 0
输出: 0

解题思路:

题目整体比较简单,in判断符号解决了大多数的问题
但是同样可以使用利用二分查找法来解决问题

  • 解法一就是利用in判断target是否在数组中,然后通过遍历来找到在数组中的位置,返回下标即可,比较简单且粗暴的方法

  • 解法二就是利用二分查找法,找到target的位置,如果没有找到,就返回数组的前一个数字比target小,后一个数字比target大的位置,如果是数组的头和尾则需要特殊处理


Python源码:

解法一

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

解法二

class Solution(object):
    def searchInsert(self, nums: 'List[int]', target: 'int') -> 'int':
        length = len(nums)
        start = 0
        end = length
        while start < end:
            mid = (start + end) // 2
            if nums[mid] == target or (nums[mid] > target 
                and (mid == 0 or nums[mid - 1] < target)):
                return mid
            if mid == length - 1 and nums[mid] < target:
                return mid + 1
            if nums[mid] < target:
                start = mid + 1
            else:
                end = mid

欢迎关注我的github:https://github.com/UESTCYangHR

猜你喜欢

转载自blog.csdn.net/dzkdyhr1208/article/details/89308647