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

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

CategoryDifficultyLikesDislikes
algorithmsMedium (42.36%)2235-

Tags

array | binary-search

Companies

linkedin

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

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

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 0 <= nums.length <= 105
  • -109 <= nums[i] <= 109
  • nums 是一个非递减数组
  • -109 <= target <= 109

Discussion | Solution

解法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
struct Solution;

// @lc code=start
impl Solution {
    /// ## 解题思路
    /// - 二分查找
    pub fn search_range(nums: Vec<i32>, target: i32) -> Vec<i32> {
        let target_ids: Vec<i32> = nums
            .iter()
            .enumerate()
            .filter(|(i, &n)| n == target)
            .map(|(i, _)| i as i32)
            .collect();

        vec![
            *target_ids.first().unwrap_or(&-1),
            *target_ids.last().unwrap_or(&-1),
        ]
    }
}
// @lc code=end
updatedupdated2024-08-252024-08-25