【每日一题】【LeetCode】【第十四天】【Python】在排序数组中查找元素的第一个和最后一个位置

解决之路= =

周日,写个中等难度的。

题目描述

在这里插入图片描述

测试案例(部分)

在这里插入图片描述

第一次

序列是有序的,然后找指定的元素,肯定是扎堆的,所以先找到元素第一个位置,然后通过线性探测逐步+1的往后找,什么时候不相等了,就停止探测,直接输出。

class Solution(object):
    def searchRange(self, nums, target):
        if target not in nums:
            return [-1, -1]
        else:
            left = nums.index(target)
            right = left
            for i in range(len(nums) - left - 1):
                if nums[right + 1] == nums[right]:
                    right += 1
            return [left, right]

测试正确,提交成功。
在这里插入图片描述
解法的效率还挺快,不过因为不确定这个index的时间复杂度,不知道我这个解法时间复杂度是多少。

但,我试了评论区他们用二分法写的,运行了一下,花费时间比自己写的要慢,所以我这个代码也算符合题目要求了。

在这里插入图片描述

闲谈

为了试一下logn的方法,评论区都在说用二分查找。

因为符合二分查找的条件——有序。二分查找的时间复杂度倒真是O(log2n),然后再确认是否是第一个位置和最后一个位置。

附件

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值