【算法通关指南:算法基础篇】二分算法: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

GitHub汉化插件完整指南:打造个性化中文开发环境

GitHub汉化插件完整指南:打造个性化中文开发环境 【免费下载链接】github-chineseGitHub 汉化插件,GitHub 中文化界面。 (GitHub Translation To Chinese) 项目地址: https://gitcode.com/gh_mirrors/gi/github-chinese 还在为GitHub的英文界面感到困扰吗?GitHub汉化插件能够将整个平台界面完美转换为中文环境,让技术学习和项目管理变得更加轻松自然。这款开源工具不仅支持完整的界面中文化,还提供亮色与暗色主题的完美适配,为你打造个性化的开发体验。 🚀 快速上手安装步骤 第一步:安装脚本管理器 这是运行汉化插件的基础环境,推荐选择: * Tampermonkey:功能丰富,社区活跃 * Violentmonkey:开源轻量,隐私友好 安装方法: 1. 打开浏览器应用商店 2. 搜索对应名称并点击安装 3. 确认工具栏出现相应图标 安全提示:务必从官方渠道下载,避免使用第三方来源的安装包。 第二步:获取汉化脚本 有两种方式可以获取最新的汉化脚本:

By Ne0inhk

图表数据提取神器:WebPlotDigitizer 快速上手全攻略

图表数据提取神器:WebPlotDigitizer 快速上手全攻略 【免费下载链接】WebPlotDigitizerComputer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/web/WebPlotDigitizer 还在为从图表图片中提取数据而烦恼吗?WebPlotDigitizer 这款计算机视觉辅助工具能够帮你快速从各种图表图像中提取精确的数值数据。无论你是科研人员需要从论文图表获取实验数据,还是工程师要从技术报告提取趋势曲线,这个工具都能在几分钟内完成数据转换。 新手必备:快速搭建你的数据提取环境 在开始使用之前,你需要确保系统环境准备就绪。首先检查 Node.js 版本,建议使用 v14 或更高版本: node -v npm -v 如果未安装,Ubuntu 用户可以通过以下命令快速安装: sudo apt update

By Ne0inhk

Qwen3.5 开源全解析:从 0.8B 到 397B,代际升级 + 全场景选型指南

摘要 2026 年除夕夜,阿里通义千问正式发布Qwen3.5 开源模型家族,从 0.8B 端侧小模型到 397B 旗舰 MoE 模型全覆盖。本文深度对比 Qwen3.5 与前代 Qwen3 的核心升级,拆解全参数版本差异、优势与落地场景,帮开发者快速选型、高效部署。 前言 大模型行业早已告别 “参数内卷”,转向效率、多模态、低成本落地。Qwen3.5 不是简单的版本迭代,而是通义千问在架构、训练、推理、生态上的代际突破,全面开源(Apache 2.0 协议),让个人开发者、中小企业都能用最低成本跑起最强性能。 一、Qwen3.5 vs Qwen3:四大核心升级

By Ne0inhk

github 类似 开源网站

除了 GitHub,国内外还有许多优秀的代码托管和开发者协作平台,各有特色。以下是分类整理: 全球知名平台 1. GitLab * 特点:最强的一体化 DevOps 平台,CI/CD 功能内建且强大,社区版免费且功能齐全。 * 网址:gitlab.com(云端版)或可自行部署。 2. Bitbucket * 特点:Atlassian 旗下,与 Jira、Trello 等项目管理工具深度集成,适合企业团队。 * 网址:bitbucket.org 3. AWS CodeCommit * 特点:亚马逊 AWS 生态内的托管 Git 仓库,与 AWS 服务无缝集成。 * 适用:深度使用 AWS 云服务的团队。

By Ne0inhk