【LeetCode 简单题】10-搜索插入位置

声明:

今天是第10道题。给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置,可以假设数组中无重复元素。以下所有代码经过楼主验证都能在LeetCode上执行成功,代码也是借鉴别人的,在文末会附上参考的博客链接,如果侵犯了博主的相关权益,请联系我删除

(手动比心ღ( ´・ᴗ・` ))

正文

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

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

解法1。将问题拆分成简单和复杂两种,简单的就是先写if语句判断target需要插入在首尾的情况,再考虑遍历的情况

class Solution:
    def searchInsert(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """
        # V 1.0,能提交
        # 先比较首尾元素,这是2种比较简单的情况
        if nums[0]>target:
            return 0
        if nums[-1]<target:
            return len(nums)
        
        # 再考虑需要遍历数组的情况
        if target in nums:
            return nums.index(target)
        else:
            for num in nums:
                if num > target:
                    return nums.index(num)
        return 0

解法2。常规的做法,用二分法遍历,这里是left<right的情况,还有种left<=right的情况,代码更简洁,在结尾解法2的链接中这两种写法的示例都有。

class Solution:
    def searchInsert(self, nums, target):
        # V 2.0,能提交
        if not nums:
            return 0
        left = 0
        right = len(nums) - 1
        while left < right:
            mid = int((left+right)/2)  # 注意这里一定要强制转换成int型,不然提交时会报TypeError
            if nums[mid] > target:
                right = mid - 1
            elif nums[mid] < target:   # 注意这里elif后一定要接判断条件才符合Python语法
                left = mid + 1
            else:
                return mid

        if(nums[left] < target):       # 跳出while循环后left=right或者left=right+1,此时仍需继续判断target需插入的index值
            return left + 1
        else:
            return left
                

结尾

解法1:自己的思路杂糅别人的思路,在此便不贴出了。

解法2:https://blog.csdn.net/qqxx6661/article/details/77959515

扫描二维码关注公众号,回复: 3331075 查看本文章

猜你喜欢

转载自blog.csdn.net/weixin_41011942/article/details/82584923