【LeetCode】35. 搜索插入位置

136 阅读2分钟

image.png

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

测试岗位也越来卷了,除了基本的功能测试外,还要有编程基础、脚本经验才脱颖而出。

怎么才能提高我们的编程能力呢,刷LeetCode是最佳的途径之一,话不多数,刷题走起~

一、题目描述:

  • 题目内容

    image.png

  • 题目示例

    image.png

  • 题目解析

    • 题目给出的一个升序的数组和target目标值
    • 要求target目标值在数组中进行查找,并返回其索引位置
    • 如果target值在数组中不存在,则根据target值大小与数组中元素比较
    • 使数组保持升序排列

二、思路分析:

我们拿到本题,有了前面的刷题基础了,实现本题的思路也比较清晰了(菜鸟方法):

  • 首先判断target值在数组中,则返回nums数组的索引
  • 当target值不在数组中,且target小于nums[0]时,则返回索引位置0
  • 当target值不在数组中,且target大于nums[len(nums)-1],则返回索引位置len(nums)
  • 使用for循环遍历数组,分别判断target在nums[i-1],nums[i]范围内,则返回索引位置

image.png

按照上述思路,我们用python进行实现代码如下:

class Solution(object):
    def searchInsert(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """

        if target in nums:
            return nums.index(target)
        
        if target not in nums:

            for i in range(1,len(nums)):

               if target in range(nums[i-1],nums[i]):

                    return i

            if target < nums[0]:
            
                return 0
            
            return len(nums)

看了大佬们的解题思路,二分法来求解。

二分法顾名思义就是不断缩小范围进行查找

image.png

  • 当 target 大于nums[mid]时,则left指针移到mid+1位置
  • 当 target 小于nums[mid]时,则right指针移到mid-1位置

image.png

class Solution(object):
    def searchInsert(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: int
        """

        left = 0
        right = len(nums)-1

        while left <=right:

            mid = left + (right-left)/2

            if nums[mid] < target:

                left = mid +1

            else:

                right = mid-1
        
        return left 

三、总结:

我们使用暴力的方法进行解决后,提交代码记录:

image.png

使用二分法,提交记录为:

image.png

时间复杂度O(nlogn),空间复杂度为O(1)

以上是本期内容,欢迎大佬们点赞评论,下期见~~~