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

C语言指针与数组的深度应用与内存解析

C语言指针与数组的深度应用与内存解析

C语言指针与数组的深度应用与内存解析 💡 学习目标:掌握指针与数组的等价性原理,熟练运用指针操作数组元素,理解二者在内存中的存储本质,解决实际开发中数组遍历、数据拷贝的高效实现问题。 💡 学习重点:指针与数组名的区别、指针算术运算操作数组、二维数组的指针访问方式、内存视角下的数组与指针关系。 48.1 指针与数组的核心关联:本质与等价性 在C语言中,指针和数组的关系密不可分。很多初学者会混淆数组名和指针的概念,实际上二者既有联系又有本质区别。 48.1.1 数组名的“隐式转换”特性 当数组名出现在表达式中时,它会隐式转换为指向数组首元素的指针。我们可以通过一个简单的例子来验证这个特性: #include<stdio.h>intmain(){int arr[5]={10,20,30,40,50};// 输出数组首元素地址printf("数组名arr的地址:%p\n", arr)

By Ne0inhk
速卖通商品详情数据 API 接口全解——注册、签名、Python 调用到落库一条龙

速卖通商品详情数据 API 接口全解——注册、签名、Python 调用到落库一条龙

关键词:AliExpress、aliexpress.item.get、官方 OpenAPI、跨境电商、Python 示例、合规限速 适用:比价 SaaS、ERP 选品、数据分析、第三方金融评估 一、接口能拿到什么数据? 速卖通开放平台提供 aliexpress.item.get,一次调用可回 30+ 字段: 1. 基础:商品标题、一口价/原价、折扣率、主图 URL、币种 2. SKU:各规格库存、阶梯价、属性图、尺码/颜色绑定 3. 物流:运费模板、海外仓、预计妥投时间 4. 营销:

By Ne0inhk

Python量化金融实战:突破传统框架的技术革新之路

Python量化金融实战:突破传统框架的技术革新之路 【免费下载链接】Python-for-Finance-Second-EditionPython for Finance – Second Edition, published by Packt 项目地址: https://gitcode.com/gh_mirrors/py/Python-for-Finance-Second-Edition 在金融科技浪潮席卷全球的今天,Python凭借其独特的技术优势,正重新定义着量化金融的边界。本文将从技术瓶颈突破的角度,为您揭示Python在量化金融领域的创新应用。 量化金融的技术困境与Python破局 当前传统量化方法面临着数据处理效率低、模型验证周期长、策略迭代速度慢等核心问题。Python通过以下方式实现技术突破: 数据处理能力对比分析 技术方案数据处理速度开发效率模型精度维护成本传统Excel分析缓慢中等一般低专业金融软件快速低高高Python技术栈极快高优秀中等 Python量化金融的技术优势体现在三个层面: 底层架构优势:基于NumPy和Pandas的向量化

By Ne0inhk

Selenium+Python—实现基本自动化测试

什么是selenium Selenium是基于WEB应用的验收测试工具集合,直接运行在浏览器中,通过一系列命令来模拟用户操作,可以将这些命令转化成实际的请求在浏览器中运行的命名比较有意思,当时是主流的商业自化工具,是化学元素汞(俗称水银),而是开源自动化工具,是化学元素硒,硒可以对抗汞。 selenium家族族谱 从2004年至今,selenium经历了3个版本,即Selenium1.0,Selenium2.0,Selenium3.0   2.1Selenium1.0  简单的公式: Selenium1.0=SeleniumIDE+SeleniumGrid+SeleniumRC   SeleniumIDE:是嵌入到Firefox浏览器中的一个插件,实现简单的浏览器操作的录制与回放功能。   SeleniumGrid:selenium分布式   SeleniumRC:Selenium1.0的核心,SeleniumRC支持多种不同语言编写的自动化测试脚本,在浏览器中运行JavaScript应用,使用浏览器内置的JavaScript翻译器来翻译和执行selenese命令

By Ne0inhk