美文网首页算法学习打卡计划
leetcode第三十四题 —— 排序数组查找元素位置

leetcode第三十四题 —— 排序数组查找元素位置

作者: 不分享的知识毫无意义 | 来源:发表于2019-12-20 22:14 被阅读0次

    1.题目

    原题:

    给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。你的算法时间复杂度必须是 O(log n) 级别。
    如果数组中不存在目标值,返回 [-1, -1]。

    例子:

    输入: nums = [5,7,7,8,8,10], target = 8
    输出: [3,4]
    

    2.解析

    这道问题明确要求时间复杂度是O(logn)级别的,就是要求用二分法进行求解,二分法求解的一般思路是设置一个左指针和右指针,然后跟中间的指针比较,更新左右指针,直至左指针和右指针相等。
    放到这道题有三种情况:
    (1)target<nums[mid]:right = mid -1
    (2)target>nums[mid]:left = mid+1
    (3)target = nums[mid+1]:遍历满足条件的最大值和最小值

    3.python代码

    class Solution:
        def searchRange(self, nums, target):
            if target not in nums:
                return [-1, -1]
            llen = len(nums) - 1
            left = 0
            right = llen
            while right >= left:
                mid = (right + left) // 2
                if target < nums[mid]:
                    right = mid - 1
                elif target > nums[mid]:
                    left = mid + 1
                else:
                    r = mid
                    l = mid
                    # print(r, l)
                    while l - 1 >= 0 and target == nums[l - 1]:
                        l -= 1
                    while r + 1 <= llen and target == nums[r + 1]:
                        r += 1
                    return [l, r]
    

    相关文章

      网友评论

        本文标题:leetcode第三十四题 —— 排序数组查找元素位置

        本文链接:https://www.haomeiwen.com/subject/lpvinctx.html