《算法闯关指南:优选算法--二分查找》--23.寻找旋转排序数组中的最小值,24.点名

《算法闯关指南:优选算法--二分查找》--23.寻找旋转排序数组中的最小值,24.点名
在这里插入图片描述

🔥草莓熊Lotso:个人主页
❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》
✨生活是默默的坚持,毅力是永久的享受!


🎬 博主简介:

在这里插入图片描述

文章目录


前言:

聚焦算法题实战,系统讲解三大核心板块:优选算法:剖析动态规划、二分法等高效策略,学会寻找“最优解”。 递归与回溯:掌握问题分解与状态回退,攻克组合、排列等难题。 贪心算法:理解“局部最优”到“全局最优”的思路,解决区间调度等问题 内容以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。

23. 寻找旋转排序数组中的最小值

题目链接

153. 寻找旋转排序数组中的最小值 - 力扣

题目描述

在这里插入图片描述

题目示例

在这里插入图片描述

解法(二分查找):

算法思路:

题目中的数组规则如下图所示:

在这里插入图片描述


其中 c 点就是我们要求的点。
二分的本质:找到一个判断标准,使得查找区间能够一分为二。
通过图像我们可以发现,【A,B】 区间内的点都是严格大于 D 点的值的,C 点的值是严格小于 D 点的值的。但是当 【C,D】 区间只有一个元素的时候,C 点的值是可能等于 D 点的值的。

因此,初始化左右两个指针 leftright
然后根据 mid 的落点,我们可以划分下一个查询的区间:

  • mid【A,B】 区间的时候,也就是 mid 位置的值严格大于 D 点的值,下一次查询区间在 【mid+1,right】 上;
  • mid【C,D】 区间的时候,也就是 mid 位置的值严格小于等于 D 点的值,下次查询区间在 【left,mid】 上。

当区间长度变成 1 的时候,就是我们要找的结果。

C++算法代码:

classSolution{public:intfindMin(vector<int>& nums){int n=nums.size();int left=0,right=n-1;if(nums[0]<=nums[n-1]){return nums[0];}while(left<right){int mid=left+(right-left)/2;if(nums[mid]>= nums[0]) left=mid+1;else right=mid;}return nums[left];}};

算法总结&&笔记展示:

笔记字有点丑,大家见谅:

在这里插入图片描述

24 .点名

题目链接

LCR 173. 点名 - 力扣(LeetCode)

题目描述

在这里插入图片描述


题目示例

在这里插入图片描述

解法(二分查找):

算法思路:

关于这道题中,时间复杂度为 O(N) 的解法有很多种,而且也都比较好想到,这里就不再赘述。本题我们主要介绍的是一个时间复杂度为 O(logn) 的最优解法二分法:
在这个升序的数组中,我们发现:

  • 在第一个缺失位置的左边,数组内元素都是与数组下标相等的;
  • 在第一个缺失位置的右边,数组内的元素都是与数组下标不相等的。

因此,我们可以利用这个 【二段性】 ,来使用 【二分查找】 算法。

C++算法代码:

classSolution{public:inttakeAttendance(vector<int>& nums){int left=0,right=nums.size()-1;while(left<right){int mid=left+(right-left)/2;if(nums[mid]==mid) left=mid+1;else right=mid;}if(nums[left]==left)return left+1;return left;}};

算法总结&&笔记展示:

笔记字有点丑,大家见谅:

在这里插入图片描述

结尾:

🍓 我是草莓熊 Lotso!若这篇技术干货帮你打通了学习中的卡点: 👀 【关注】跟我一起深耕技术领域,从基础到进阶,见证每一次成长 ❤️ 【点赞】让优质内容被更多人看见,让知识传递更有力量 ⭐ 【收藏】把核心知识点、实战技巧存好,需要时直接查、随时用 💬 【评论】分享你的经验或疑问(比如曾踩过的技术坑?),一起交流避坑 🗳️ 【投票】用你的选择助力社区内容方向,告诉大家哪个技术点最该重点拆解 技术之路难免有困惑,但同行的人会让前进更有方向~愿我们都能在自己专注的领域里,一步步靠近心中的技术目标! 

结语:本文精选两道二分查找经典题型,通过图解与代码实现详解解题思路。旋转排序数组最小值:利用区间二段性,比较中点与右端点值,收缩查找范围至单个元素。缺失数字查找:根据元素值与下标关系二分,定位首个不匹配位置。笔记附手写解析,助你掌握二分核心思想——“以判断标准分割区间”,高效解决有序数据问题。

✨把这些内容吃透超牛的!放松下吧✨ʕ˘ᴥ˘ʔづきらど


我的博客即将同步至腾讯云开发者社区,邀请大家一同入驻:腾讯云开发者社区

Read more

Windows系统上Python如何升级及版本管理

Windows系统上Python如何升级及版本管理

前言 用户经常在使用python时候,发现版本升级过快,不同的项目可能用到不同的python版本,本文就windows下,关于Python 3.11 升级到 Python 3.12做一个简单的记录和介绍。希望能帮助到你。 一、版本确认与环境准备 1. 检查当前版本 在命令提示符中输入:         python --version 若显示Python 3.11.x,则说明当前环境为目标升级前状态。 1. 备份关键数据 对于需要升级的项目,可以导出依赖列表: pip freeze > requirements.txt 备份项目文件和配置文件至安全目录。 二、升级路径选择 (一)官方安装程序升级(推荐) 1. 下载 Python 3.12 安装包 访问Python 官方下载页面,选择Windows installer

By Ne0inhk
Python爬虫(54)Python数据治理全攻略:从爬虫清洗到NLP情感分析的实战演进

Python爬虫(54)Python数据治理全攻略:从爬虫清洗到NLP情感分析的实战演进

目录 * 引言:数据价值炼金术的三大挑战 * 一、项目背景:某跨境电商平台评论治理需求 * 二、智能爬虫系统架构设计 * 2.1 分布式爬虫实现 * 2.2 原始数据质量探查 * 三、Pandas数据清洗进阶实践 * 3.1 复合去重策略 * 3.1.1 精确去重增强版 * 3.1.2 语义去重深度优化 * 3.2 智能缺失值处理 * 3.2.1 数值型字段混合填充 * 3.2.2 文本型字段深度填充 * 四、Great Expectations数据质量验证体系 * 4.1 高级验证规则配置 * 4.2 自动化验证工作流 * 五、NLP情感分析深度集成 * 5.

By Ne0inhk
Python数学可视化——显函数、隐函数及复杂曲线的交互式绘图技术

Python数学可视化——显函数、隐函数及复杂曲线的交互式绘图技术

Python数学可视化——显函数、隐函数及复杂曲线的交互式绘图技术 一、引言 在科学计算和数据分析中,函数与方程的可视化是理解数学关系和物理现象的重要工具。本文基于Python的Tkinter和Matplotlib库,实现一个功能完善的函数与方程可视化工具,支持显函数、隐函数、特殊曲线(如心形线)及物理场分布(如电势)的交互式绘图,并提供安全的表达式解析、图像保存等功能。 二、核心技术架构 2.1 系统架构与技术选型 * 界面层:使用Tkinter构建GUI,包含类型选择、表达式输入、预设函数下拉菜单等控件 * 计算层: * 显函数:通过np.linspace生成采样点,安全计算函数值 * 隐函数:基于等高线算法contour绘制等值线 * 安全机制:通过正则表达式过滤非法字符,限制白名单函数防止代码注入 * 可视化层:Matplotlib实现图表渲染,支持动态更新和交互式工具条 2.2 安全表达式解析 defis_valid_expression(expr):""

By Ne0inhk
2025年中秋月亮只有94.91%圆?Python告诉你真相

2025年中秋月亮只有94.91%圆?Python告诉你真相

前言: 又是一年中秋节,祝大家中秋快乐!作为程序员的我们,还有谁和我一样在外奔波而不能回家,想和大家说一声辛苦啦!既然不能回家吃月饼、赏明月,那我是不是也能用代码写下属于自己的中秋记忆,为朋友们送去我们自己特殊的中秋祝福,让技术和传统节日碰撞出新的火花。 本文目录: * 一、月相计算:今晚的月亮到底有多圆 * 1. 月相可视化 * 二、月饼切分算法:公平分配的艺术 * 1. 经典切分策略 * 2. 进阶问题:不过圆心的切分 * 三、诗词生成:中秋凑诗 * 四、月球数据可视化:用数据看月亮 * 1. 先画月球表面:模拟环形山地形 * 2. 再做月相动画:看一个月月亮怎么变 * 五、中秋快乐,记得吃月饼🥮 * 写在最后 一、月相计算:今晚的月亮到底有多圆 今天是中秋节,刷朋友圈的时候突然想到一个问题:今年中秋的月亮到底有多圆?作为Python开发者,我决定用代码来算一算。顺便整理了几个和中秋相关的有趣项目,

By Ne0inhk