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;
}
相关推荐
yongui4783418 分钟前
NSGA-II求解多目标柔性作业车间调度算法(含甘特图绘制)
算法·甘特图
故事和你911 小时前
洛谷-算法2-1-前缀和、差分与离散化1
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
知识浅谈8 小时前
DeepSeek V4 和 GPT-5.5 在同一天发布了??我也很懵,但对比完我悟了
算法
DeepModel8 小时前
通俗易懂讲透 Q-Learning:从零学会强化学习核心算法
人工智能·学习·算法·机器学习
田梓燊8 小时前
力扣:19.删除链表的倒数第 N 个结点
算法·leetcode·链表
简简单单做算法10 小时前
基于GA遗传优化双BP神经网络的时间序列预测算法matlab仿真
神经网络·算法·matlab·时间序列预测·双bp神经网络
guygg8810 小时前
利用遗传算法解决列车优化运行问题的MATLAB实现
开发语言·算法·matlab
武藤一雄10 小时前
19个核心算法(C#版)
数据结构·windows·算法·c#·排序算法·.net·.netcore
sali-tec10 小时前
C# 基于OpenCv的视觉工作流-章52-交点查找
图像处理·人工智能·opencv·算法·计算机视觉
yu859395811 小时前
MATLAB连续线性化模型预测控制(SL-MPC)
算法·机器学习·matlab