码迷,mamicode.com
首页 > 编程语言 > 详细

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置

时间:2021-02-08 11:42:16      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:tco   最大   存在   次数   解决   下标   elf   整数   数组   

34. 在排序数组中查找元素的第一个和最后一个位置

Difficulty: 中等

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target,返回 [-1, -1]

进阶:

  • 你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗?

示例 1:

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

示例 2:

输入:nums = [5,7,7,8,8,10], target = 6
输出:[-1,-1]

示例 3:

输入:nums = [], target = 0
输出:[-1,-1]

提示:

  • 0 <= nums.length <= 10<sup>5</sup>
  • -10<sup>9</sup> <= nums[i] <= 10<sup>9</sup>
  • nums 是一个非递减数组
  • -10<sup>9</sup> <= target <= 10<sup>9</sup>

Solution

解法一:很容易想到的思路,比较简单,遍历一次数组找到所有等于target的元素的下标索引然后找到对应最大最小的索引。需要注意的是数组所有的元素都相等的特殊情况。

class Solution:
    def searchRange(self, nums: List[int], target: int) -> List[int]:
        if not nums:
            return [-1,-1]
        
        res = []
        for i, v in enumerate(nums):
            if v == target:
                res.append(i)
        if not res:
            return [-1,-1]
        elif len(res) == 1:
            return [res[0],res[0]]
        else:
            return [min(res), max(res)]

LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置

标签:tco   最大   存在   次数   解决   下标   elf   整数   数组   

原文地址:https://www.cnblogs.com/swordspoet/p/14381248.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!