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

该代码实现了一个函数,用于找出目标值在给定排序数组中的左右边界。它使用了二分查找算法,分别在`getLeftBorder`和`getRightBorder`函数中找到最小和最大出现位置。如果目标值不存在,返回-1。
摘要由CSDN通过智能技术生成

万事开头难
在这里插入图片描述
关于寻找左边界的图解
在这里插入图片描述



/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int getLeftBorder();
int getRightBorder();
int* searchRange(int* nums, int numsSize, int target, int* returnSize){
    *returnSize = 2;
    int *ra = (int *)malloc(sizeof(int) * 2);
    int LeftBorder = getLeftBorder(nums,numsSize,target);
    int RightBorder = getRightBorder(nums,numsSize,target);
    if(LeftBorder > RightBorder)
    {
        ra[0] = ra[1] = -1;
        return ra;
    } 
        ra[0] = LeftBorder;
        ra[1] = RightBorder;  
    return ra;
}
int getLeftBorder(int *nums,int numsSize ,int target){
    int left = 0;
    int right = numsSize - 1;
    while(left <= right){  //区间为左闭右闭
    int mid = left + (right - left) / 2;  //防溢出
    if(nums[mid] >= target)
        right = mid -1;
    else
        left = mid +1;
}
    return left;
}
int getRightBorder(int *nums,int numsSize,int target){
    int left = 0;
    int right = numsSize - 1;
    while(left <= right){  //区间为左闭右闭
    int mid = left + (right - left) / 2;  //防溢出
    if(nums[mid] <= target)
        left = mid +1;
    else
        right = mid -1;
}
    return right;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值