34. 在排序数组中查找元素的第一个和最后一个位置(C++)

该文章介绍了一个在C++中使用二分查找解决LeetCode上的问题,即在有序数组中找到目标元素的第一个和最后一个位置。通过lower_bound和upper_bound函数,代码有效地找到了目标元素的边界,并处理了不存在目标元素的情况。

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

题干:
https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/

我们可以使用C++的二分查找。

有轮子不用是傻子 ^ _ ^,哈哈哈。当然,以咱们的实力,你觉得咱们会写不出来自己的算法吗?咱们只是经过深思熟虑后,决定把时间用在刀刃上。(ps:Where is your face?)

class Solution {
public:
    vector<int> searchRange(vector<int>& nums, int target) {
        if (nums.empty()) return vector<int>{-1, -1};
        
        auto left = lower_bound(nums.begin(), nums.end(), target);//左区间
        auto right = upper_bound(nums.begin(), nums.end(), target);//右区间

        //让我们祈祷编译器让left不越界,希望它会偷懒。如果left == end(),祈祷编译器会直接跳过*left所在表达式
        if (left == nums.end() || *left != target) { return vector<int>{-1, -1}; }//数组没有target
        else {
            return vector<int>{static_cast<int>(left - nums.begin()), static_cast<int>(right - nums.begin() - 1) };
        }
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值