【算法通关指南:算法基础篇】二分算法:1.在排序树组中查找元素的第一个和最后一个位置 2.牛可乐和魔法封印

【算法通关指南:算法基础篇】二分算法:1.在排序树组中查找元素的第一个和最后一个位置 2.牛可乐和魔法封印
在这里插入图片描述
🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人方向学习者
❄️个人专栏:《算法通关指南》
永远相信美好的事情即将发生
在这里插入图片描述

文章目录


前言

本专栏聚焦算法题实战,系统讲解算法模块:以《c++编程》,《数据结构和算法》《基础算法》《算法实战》 等几个板块以题带点,讲解思路与代码实现,帮助大家快速提升代码能力ps:本章节题目分两部分,比较基础笔者只附上代码供大家参考,其他的笔者会附上自己的思考和讲解,希望和大家一起努力见证自己的算法成长

一、二分算法

当我们的解具有二段性时,就可以使⽤二分算法找出答案:
• 根据待查找区间的中点位置,分析答案会出现在哪⼀侧;
• 接下来舍弃一半的待查找区间,转而在有答案的区间内继续使用二分算法查找结果。
时间复杂度为:O(logN)

STL中的二分查找lower_bound大于等于x的最小元素,返回的是迭代器;时间复杂度:O(log N) 。upper_bound大于x的最小元素,返回的是迭代器。时间复杂度:O(log N) 。

二、在排序树组中查找元素的第一个和最后一个位置

2.1题目

链接:在排序树组中查找元素的第一个和最后一个位置

在这里插入图片描述

2.2 算法原理

左右端点求法
(1)定义两个指针指向数组的头和尾
(2)二分区间
(3)判断获取的端点值是否合法

二分容易死循环的环节
(1)区间缩小头尾指针的相遇条件
(2)中值得求法

2.3代码

class Solution{ public: vector<int>searchRange(vector<int>& nums, int target){if(nums.size()==0)return{-1,-1};//二分查找左端点 int left =0,right = nums.size()-1;while(left < right){ int mid =(left + right)/2;if(nums[mid]>= target) right = mid;else left = mid +1;}if(nums[left]!= target)return{-1,-1}; int retleft = left;//二分查找右端点 left =0,right = nums.size()-1;while(left < right){ int mid =(left + right +1)/2;if(nums[mid]<= target) left = mid;else right = mid -1;}return{retleft,right};}};

三、牛可乐和魔法封印

3.1题目

链接:牛可乐和魔法封印

在这里插入图片描述

3.2 算法原理

二分查找算法模版题,依照第一题思路来写即可
注: 有可能并没有这个区间,需要在⼆分结束之后判断⼀下。

3.3代码

#include <iostream> using namespace std; const int N =1e5+10; typedef long long LL; LL a[N]; int n; int binary_search(int x,int y){ LL l =1,r = n;//查找左端点while(l < r){ LL mid =(l + r)/2;if(a[mid]>= x) r = mid;else l = mid +1;} LL retl = l;//判断端点是否合法if(a[l]< x)return0;//查找右端点 l =1,r = n;while(l < r){ LL mid =(l + r +1)/2;if(a[mid]<= y) l = mid;else r = mid -1;}if(a[r]> y)return0;return r - retl +1;} int main(){ cin >> n;for(int i =1;i <= n;i++) cin >> a[i]; int q; cin >> q;while(q--){ int x,y; cin >> x >> y; int ret =binary_search(x,y); cout << ret << endl;}return0;}

总结与每日励志

✨本次围绕二分算法展开,讲解其二段性核心逻辑及STL二分函数,结合两道实战题实操演练,重点掌握左右端点查找的二分模版、mid取整技巧及端点合法性判断,规避死循环误区。算法学习重在沉淀,每一道模版题的练习,都是突破瓶颈的底气。✨ 永远相信美好的事情即将发生,坚持刷题、深耕细节,不慌不忙,稳步前行,终会在算法之路上,遇见更好的自己!

在这里插入图片描述

Read more

剖析 SOFATracer:蚂蚁金服开源分布式链路追踪组件

剖析 SOFATracer:蚂蚁金服开源分布式链路追踪组件

目录 一、为什么需要 SOFATracer?  二、核心思想与能力 (一)基于 OpenTracing 标准构建 1. OpenTracing 标准 2. SOFATracer 如何实现标准? a. Tracer 接口实现(SofaTracer) b. Span 实现(SofaTracerSpan) c. SpanContext 透传(SofaTracerSpanContext) 3. 标准机制带来的优势 4. 与分布式追踪基础论文的联系 5. 传播机制与链路构建过程 (二)全局 TraceId + SpanId 串联链路 (三)高性能日志异步写盘 1. 问题背景:为什么同步写日志是灾难? 1.1 I/O 阻塞放大 RT

By Ne0inhk
为什么企业禁用MinIO,以及MinIO的开源平替介绍

为什么企业禁用MinIO,以及MinIO的开源平替介绍

目前,MinIO 在中国并非被“官方禁用”,是大量企业主动弃用MinIO,主要出于合规、安全、许可证、信创四大类风险考量,并普遍转向国产开源平替方案。以下分两部分说明: 一、企业“禁用”MinIO 的 4 类核心原因 1. 许可证风险(AGPL v3) * MinIO 社区版采用 AGPL v3,具有“传染性”:一旦与公司内部闭源代码产生链接/调用,理论上需将整个代码栈开源。 * 国内外主流大厂(Google、阿里、华为等)内部均明文禁止引入 AGPL 组件;法务一旦排查,必须下线整改。 2. 信创合规门槛 * 政务、金融、能源、医疗等关键领域要求 CPU、操作系统、数据库、中间件全部国产化。

By Ne0inhk

GitHub 上开源了 30+ 个 OpenClaw 真实使用案例。

最近逛 GitHub 的时候发现了一个挺有意思的仓库,专门收集 OpenClaw 的 usecases。 说实话,很多人装完 OpenClaw 之后的操作都是一样的:疯狂往里面塞各种 Skill,ClawHub 逛得跟菜市场一样热闹,今天装个天气查询,明天装个股票分析,后天又来个翻译助手。 结果装了一堆却发现每天还是在信息搜索、做个记录。Skill 装了一百个,生活一点没变轻松。 这个开源项目就是专门收集人们真实在用的 OpenClaw 场景,而不是单纯介绍某个 Skill 或插件。 01 开源项目简介 awesome-openclaw-usecases 目前收录了 30 多个经过验证的真实使用场景。 它的核心理念非常简单:不是教你装什么 Skill,而是告诉你别人是怎么把 OpenClaw 变成真正能帮人类干活的私人助理的。 如果你不知道 OpenClaw 具体能做什么,只停留在抽象概念。有一些自动化或搭建 AI 智能体想法,但不知道如何系统落地,想参考别人已经跑通的真实工作流和自动化方案。

By Ne0inhk
深度盘点:GitHub 上十大必装 Claude Skill,让你的 AI 助手效率提升 4 倍

深度盘点:GitHub 上十大必装 Claude Skill,让你的 AI 助手效率提升 4 倍

深度盘点:GitHub 上十大必装 Claude Skill,让你的 AI 助手效率提升 4 倍 Claude Code 已经很强大,但如果搭配这些精心设计的 Skills,它将变身超级生产力工具。本文为你深度解析 GitHub 上最受欢迎的 10 大 Claude Skills,帮助你找到最适合的配置方案。 引言:为什么 Claude Skills 如此重要? 在 2025-2026 年,Claude Code 生态经历了爆发式增长。Skills 系统的出现,让 Claude 从一个"对话助手"升级为"专业工具"。通过安装不同的 Skills,你可以:

By Ne0inhk