[路飞][LeetCode]34_在排序数组中查找元素的第一个和最后一个位置

109 阅读1分钟

看一百遍美女,美女也不一定是你的。但你刷一百遍算法,知识就是你的了~~

谁能九层台,不用累土起!

题目地址

题目

给定一个按照升序排列的整数数组 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 <= 105
  • -109 <= nums[i] <= 109
  • nums 是一个非递减数组
  • -109 <= target <= 109

解题思路

  • 我们遍历数组
  • 在第一次遇到target值时记录下起始位置
  • 每次遇到target值更新结束位置
  • 遍历结束后返回结果

解题代码

var searchRange = function(nums, target) {
    let [left,right] = [-1,-1] 
    for(let i =0 ;i<nums.length;i++){
        if(nums[i]==target){
            right = i
            if(left<0){
                left = i
            }
        }
    }
    return [left,right]
};

如有任何问题或建议,欢迎留言讨论!