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;
}
相关推荐
裕晟资质规划7 小时前
武器装备科研生产单位保密资质申请方法论:条件模型与流程拆解
人工智能·算法
en.en..8 小时前
C语言 标准输入 / 输出缓冲区
算法
吃好睡好便好10 小时前
查找函数的使用
学习·算法·matlab·生活·查找函数
学习星球10 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
靠沿11 小时前
贪心算法专题(二)
算法·贪心算法
猎头南楼12 小时前
具身智能模型部署方向的能力要求与技术栈梳理
人工智能·深度学习·算法
啥都想学点的研究生13 小时前
一篇文章讲清楚:线性回归问题的求解——正规方程法
算法·机器学习·线性回归
青少儿编程课堂13 小时前
树状数组精讲:逆序对计数与离散化(附双语言解法)
算法·树状数组·离散化·信息学奥赛·逆序对
血小板要健康13 小时前
网格 dfs 与 FloodFill:从岛屿、区域到搜索路径
笔记·算法·leetcode·深度优先
VALENIAN瓦伦尼安教学设备14 小时前
设备状态检测振动分析实训台案例分析
大数据·数据库·人工智能·嵌入式硬件·算法