手撕3_二分查找_在排序数组中查找元素的第一个和最后一个位置

def lower_bound(nums:list[int],target:int) -> int:
    l,r = 0,len(nums) - 1
    while l <= r:
        mid = (l + r) // 2
        if nums[mid] < target:
            l = mid + 1
        else:
            r = mid - 1
    return l

nums = input()
if len(nums) == 0:
    nums = []
else:
    nums= list(map(int,nums.split(',')))
target = int(input())
start = lower_bound(nums,target)
end = lower_bound(nums,target + 1) - 1
if len(nums) == 0 or nums[start] != target:
    print([-1,-1])
else:
    print([start,end])

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
shared_ptr 是 C++11 中引入的智能指针类型,可用于管理动态分配的对象。它是通过引用计数的方式来跟踪对象的使用情况,并在不再需要时自动释放相关的内存。 shared_ptr 的过程大致如下: 1. 定义 shared_ptr 类:首先,你需要定义一个类模板 shared_ptr,它包含两个主要成员:指向动态分配内存的原始指针和一个指向引用计数的指针。此外,你还需要实现构造函数、析构函数、拷贝构造函数和赋值运算符等成员函数。 2. 初始化:在 shared_ptr 的构造函数中,你需要将原始指针和引用计数初始化为空,并将引用计数置为 1。 3. 拷贝构造函数和赋值运算符:在拷贝构造函数和赋值运算符中,你需要更新原始指针和引用计数。当一个 shared_ptr 被拷贝时,引用计数应该递增;当一个 shared_ptr 被赋值给另一个 shared_ptr 时,应该先递减左操作数的引用计数,然后再递增右操作数的引用计数。 4. 引用计数管理:你需要实现对引用计数的正确管理。当引用计数变为零时,表示没有任何 shared_ptr 指向该对象,此时应该释放相关的内存。 5. 解引用操作符和箭头操作符重载:为了使 shared_ptr 使用起来像原始指针一样,你需要重载解引用操作符和箭头操作符,以便可以直接访问对象或对象的成员。 6. 其他辅助函数:你可以实现其他辅助函数,如 get() 函数用于获取原始指针,reset() 函数用于重置 shared_ptr,以及 operator bool() 函数用于检查 shared_ptr 是否为空等。 需要注意的是,动实现 shared_ptr 需要处理好线程安全性和异常安全性等问题,这需要一定的经验和技巧。因此,在实际项目中,建议使用标准库提供的 shared_ptr 类型,以便确保代码的可靠性和性能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值