leetcode-TOP interview question-----No.34. Find First and Last Position of Element in Sorted Array

本文探讨了在已排序的整数数组中查找特定目标值的起始和终止位置的两种方法:线性扫描与二分查找。通过具体代码实现,展示了如何高效地解决这一常见算法问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解析

给定一个升序排列的整形数组,和一个目标值target, 找出给定目标值在数组中的开始位置和结束位置。
在这里插入图片描述

思路1-线性扫描

对target 检查每一个下标,对nums数组从左到右做线性遍历,当遇到target时中止,如果没有中止过,呢么target不存在,可以返回[-1, -1],如果我们找到了有效的左端点坐标,我们可以做第二遍线性扫描,这次从右往左进行,这一次第一次遇到的就是右边界.双向扫描,

思路2-二分查找

因为数组已经排序过,所以可以使使用二分搜索来定位左右下标。
引入一个布尔类型的left参数,指示我们在遇到target==nums[mid]时,如果left为true,就递归查询左区间、否则递归右区间。

public int[] searchRange(int[] nums, int target) {
        int[] res={-1,-1};
        int l=FindIndex(nums,target,true);
        if(l==nums.length||nums[l]!=target){
            return res;
        }
        res[0]=l;
        res[1]=FindIndex(nums,target,false);
        return res;
    }
private int FindIndex(int[]nums,int target,boolean left){
    int l=0;
    int r=nums.length;
    while(l<r){
        int mid=(l+r)/2;
        if(nums[mid]>target || left&&nums[mid]==target){
            r=mid;
        }
        else{
            l=mid+1;
        }
    }
    return l;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值