63.排序数组中找元素的第一个元素和最后一个元素

1.题目描述

示例 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]

2.代码

cpp 复制代码
/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
 

int find_left_bound(int* nums, int numsSize, int target){
    int left = 0;
    int right = numsSize - 1;
    int flag = 0;
    while(left <= right){
        int mid = left + (right - left )/2;
        if(nums[mid] == target){
            right = mid - 1;//找到了就往左边找左边界
            flag = 1;
        }
        if(nums[mid] > target){
            right = mid - 1;
        }
        if(nums[mid] < target){
            left = mid + 1;
        }
    } 
    //为什么会返回left呢?
    //当left == right的时候最后一次循环,如何right左移动,left才指向target
    if(flag == 0){
        return -1;
    }
    return left;
}
int find_right_bound(int* nums, int numSize, int target){
    int left = 0;
    int right = numSize - 1;
    int flag = 0;
    while(left <= right){
        int mid = left + (right - left )/2;
        if(nums[mid] == target){
            left = mid + 1;//找到了就往左边找左边界
            flag = 1;
        }
        if(nums[mid] > target){
            right = mid - 1;
        }
        if(nums[mid] < target){
            left = mid + 1;
        }
    } 
    if(flag == 0){
        return -1;
    }
    //此时返回right
    return right;
}
int* searchRange(int* nums, int numsSize, int target, int* returnSize) {
    int left_bound = find_left_bound(nums,numsSize,target);
    int right_bound = find_right_bound(nums,numsSize,target);
    int* res = (int*)malloc(sizeof(int)*2);
    res[0] = left_bound;
    res[1] = right_bound;
    returnSize[0] = 2;
    return res;
}
相关推荐
苦藤新鸡1 小时前
59 分割回文串
算法
得一录1 小时前
LoRA(Low-Rank Adaptation)的原理和实现
python·算法·机器学习
We་ct1 小时前
LeetCode 106. 从中序与后序遍历序列构造二叉树:题解+思路拆解
前端·数据结构·算法·leetcode·typescript
iAkuya1 小时前
(leetcode)力扣100 72每日温度(栈)
算法·leetcode·职场和发展
weixin_477271691 小时前
掾象:援助,辅佐。基于马王堆帛书《周易》原文及甲骨文还原周朝生活活动现象(《函谷门》原创)
算法·图搜索算法
随意起个昵称1 小时前
建图优化小记
c++·算法
逆境不可逃2 小时前
【从零入门23种设计模式04】创建型之原型模式
java·后端·算法·设计模式·职场和发展·开发·原型模式
一条大祥脚2 小时前
中心拓展法解决回文问题
算法
2 小时前
2.19列阵,私聊调配,求小数位数个数
算法