【刷题记录】34. 在排序数组中查找元素的第一个和最后一个位置

简介: 【刷题记录】34. 在排序数组中查找元素的第一个和最后一个位置

一、题目描述


来源:力扣(LeetCode)


给定一个按照升序排列的整数数组 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


二丶思路分析


二分查找


这个还是一道二分查找的题目,就不多做解释了,可以参考之前的题目
针对这个道题目


  • 当判断使用nums[mid]>=target 时,找到的是 第一个 位置
  • 当判断使用 nums[mid] <= target时,找到的是 最后一个位置


三、代码实现

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int[] ans = new int[]{-1, -1};
        int length = nums.length;
if (length ==0) return ans;
        int l =0, r = length -1;
        // 查找第一个位置
while (l < r) {
            int mid = l + r >> 1;
if (nums[mid] >= target) {
                r = mid;
            } else {
                l = mid +1;
            }
        }
        // 不存在 直接返回
if (nums[l] != target) {
            return ans;
        }
        //查找最后一个位置
        ans[0] = l;
        l =0;
        r = length -1;
while (l < r) {
            int mid = l + r +1 >> 1;
if (nums[mid] <= target) {
                l = mid;
            } else {
                r = mid -1;
            }
        }
        ans[1] = l;
        return ans;
    }
}


复杂度分析


  • 时间复杂度:
    网络异常,图片无法展示
    |
  • 空间复杂度:
    网络异常,图片无法展示
    |


运行结果


网络异常,图片无法展示
|


总结


这还是一个二分查找的运行,就不再过多的多什么总结了。


这道题目的关键点就是根据什么样的判断条件,可以得到我们想要的第一个目标值或者最后一个目标值,理解了这个就很简单了。


继续加油~~

目录
相关文章
|
3月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
3月前
|
算法 索引
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
这篇文章介绍了LeetCode第34题"在排序数组中查找元素的第一个和最后一个位置"的解题方法,通过使用双指针法从数组两端向中间同时查找目标值,有效地找到了目标值的首次和最后一次出现的索引位置。
LeetCode第34题在排序数组中查找元素的第一个和最后一个位置
|
6月前
在排序数组中查找元素的第一个和最后一个位置
在排序数组中查找元素的第一个和最后一个位置
|
Go 索引 Cloud Native
【刷题日记】34. 在排序数组中查找元素的第一个和最后一个位置
本次刷题日记的第 72 篇,力扣题为:34. 在排序数组中查找元素的第一个和最后一个位置 ,中等
|
6月前
|
算法
leetcode-34:在排序数组中查找元素的第一个和最后一个位置
leetcode-34:在排序数组中查找元素的第一个和最后一个位置
34 0
|
算法
【算法专题突破】二分查找 - 在排序数组中查找元素的第一个和最后一个位置(17)
【算法专题突破】二分查找 - 在排序数组中查找元素的第一个和最后一个位置(17)
63 0
LeetCode-34 在排序数组中查找元素的第一个和最后一个位置
LeetCode-34 在排序数组中查找元素的第一个和最后一个位置
|
算法 C语言 C++
【二分查找】34. 在排序数组中查找元素的第一个和最后一个位置
二分查找是一种高效的查找算法,其时间复杂度为 O(log n)。在许多情况下,我们需要在一个有序数组中找到某个目标值的搜索范围。本文将介绍一种基于二分查找的搜索范围查找算法,该算法能够快速找到目标值在数组中的起始和结束位置。
72 0
|
索引
力扣34在排序数组中查找元素的第一个和最后一个位置:思路分析+图文详解+代码实现(最靠左索引,最靠右索引)
力扣34在排序数组中查找元素的第一个和最后一个位置:思路分析+图文详解+代码实现(最靠左索引,最靠右索引)
57 0
|
算法 安全 Swift
LeetCode - #34 在排序数组中查找元素的第一个和最后一个位置(Top 100)
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。