当前位置: 首页 > news >正文

算法每日双题精讲 —— 二分查找(寻找旋转排序数组中的最小值,点名)

 🌟快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。 🌟 

别再犹豫了!快来订阅我们的算法每日双题精讲专栏,一起踏上算法学习的精彩之旅吧💪   


         在算法的学习之旅中,二分查找是一种高效且经典的算法,其应用场景广泛。今天我们将深入探讨如何运用二分查找来解决 “寻找旋转排序数组中的最小值” 以及趣味十足的 “点名” 问题。这两道题不仅能加深我们对二分查找的理解,还能锻炼我们在不同场景下灵活运用算法的能力。 


 目录

一、寻找旋转排序数组中的最小值

📖题目描述

🧠讲解算法原理

💻代码实现(以 C++ 为例)

复杂度分析

二、点名

📖题目描述

🧠讲解算法原理

💻代码实现(以 C++ 为例)

复杂度分析


一、寻找旋转排序数组中的最小值

题目链接👉【力扣】

📖题目描述

 

 

 

🧠讲解算法原理

对于这道题,我们可以利用二分查找来优化时间复杂度。

        初始化左指针 left 为 0,右指针 right 为数组长度减 1。在循环过程中,计算中间索引 mid = left + (right - left) / 2 。

比较 nums[mid] 与 nums[right] 的大小:

  • 如果 nums[mid] < nums[right] ,说明最小值在 mid 及其左边,因为 mid 到 right 这一段是有序的,最小值肯定不在这一段,所以将 right 更新为 mid 。
  • 如果 nums[mid] > nums[right] ,说明最小值在 mid 的右边,因为 mid 及其左边这一段是有序的,最小值不在这一段,所以将 left 更新为 mid + 1 。

当 left 等于 right 时,循环结束,此时 nums[left] 就是数组中的最小值。

 

💻代码实现(以 C++ 为例)

#include <iostream>
#include <vector>using namespace std;int findMin(vector<int>& nums) {int left = 0, right = nums.size() - 1;while (left < right) {int mid = left + (right - left) / 2;if (nums[mid] < nums[right]) {right = mid;}else {left = mid + 1;}}return nums[left];
}

复杂度分析

 

  • 时间复杂度:每次循环都将搜索区间缩小一半,所以时间复杂度为 O(log n),其中 n 是数组的长度。相比遍历整个数组查找最小值的暴力解法(时间复杂度为 O(n)),效率大大提高。
  • 空间复杂度:只使用了常数级别的额外空间,即几个指针变量,所以空间复杂度为 O(1)

二、点名

 题目链接👉【力扣】

📖题目描述

 

 

 

🧠讲解算法原理

这道题同样可以借助二分查找来高效解决。

        初始化左指针 left 为 0,右指针 right 为名单长度减 1。

        在循环中,计算中间索引 mid = left + (right - left) / 2 。

比较中间位置的学生名字与老师点的名字:

  • 如果相同,直接返回 mid 。
  • 如果中间位置的名字小于老师点的名字,说明要找的名字在 mid 的右边,将 left 更新为 mid + 1 。
  • 如果中间位置的名字大于老师点的名字,说明要找的名字在 mid 的左边,将 right 更新为 mid - 1 。

当 left 大于 right 时,循环结束,说明名单中没有该学生,返回 -1 。

💻代码实现(以 C++ 为例)

#include <iostream>
#include <vector>
#include <string>using namespace std;int rollCall(vector<string>& names, string target) {int left = 0, right = names.size() - 1;while (left <= right) {int mid = left + (right - left) / 2;if (names[mid] == target) {return mid;}else if (names[mid] < target) {left = mid + 1;}else {right = mid - 1;}}return -1;
}

复杂度分析

  • 时间复杂度:每次迭代都能将搜索区间缩小一半,时间复杂度为O(log n) ,其中 n是名单中学生的数量。相比逐个遍历名单查找学生的暴力解法(时间复杂度为 O(n)),效率大幅提升。
  • 空间复杂度:只使用了常数级别的额外空间,如几个指针变量,所以空间复杂度为 O(1)

        通过对这两道题目的学习,我们对二分查找算法的理解和应用能力又上了一个新台阶。在今后遇到类似问题时,要学会灵活运用二分查找来优化代码的时间复杂度。

如果大家在学习过程中有任何疑问或者想法,欢迎在评论区交流分享。后续我还会带来更多精彩的算法内容,记得关注哦!

 

相关文章:

算法每日双题精讲 —— 二分查找(寻找旋转排序数组中的最小值,点名)

&#x1f31f;快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。 &#x1f31f; 别再犹豫了&#xff01;快来订阅我们的算法每日双题精讲专栏&#xff0c;一起踏上算法学习的精彩之旅吧&#x1f4aa; 在算法的…...

three.js+WebGL踩坑经验合集(4.2):为什么不在可视范围内的3D点投影到2D的结果这么不可靠

上一篇&#xff0c;笔者留下了一个问题&#xff0c;three.js内置的THREE.Vector3.project方法算出来的结果对于超出屏幕可见范围的点来说错得相当离谱。 three.jsWebGL踩坑经验合集(4.1):THREE.Line2的射线检测问题&#xff08;注意本篇说的是Line2&#xff0c;同样也不是阈值…...

Kafka运维宝典 (二)- kafka 查看kafka的运行状态、broker.id不一致导致启动失败问题、topic消息积压量告警监控脚本

Kafka运维宝典 &#xff08;二&#xff09; 文章目录 Kafka运维宝典 &#xff08;二&#xff09;一、kafka broker.id冲突问题1. broker.id 冲突的影响2. 如何发现 broker.id 冲突3. 解决 broker.id 冲突的方法4. broker.id 配置管理5. 集群启动后确认 broker.id 唯一性6. brok…...

全球AI模型百科全书,亚马逊云科技Bedrock上的100多款AI模型

今天小李哥给大家介绍的是亚马逊云科技上的AI模型管理平台Amazon Bedrock上的Marketplace&#xff0c;这是亚马逊云科技在今年re:Invent发布的一个全新功能&#xff0c;将亚马逊的电商基因带到了其云计算平台&#xff0c;让我们能够通过Amazon Bedrock访问100多种流行、新兴和专…...

微信小程序中常见的 跳转方式 及其特点的表格总结(wx.navigateTo 适合需要返回上一页的场景)

文章目录 详细说明总结wx.navigateTo 的特点为什么 wx.navigateTo 最常用&#xff1f;其他跳转方式的使用频率总结 以下是微信小程序中常见的跳转方式及其特点的表格总结&#xff1a; 跳转方式API 方法特点适用场景wx.navigateTowx.navigateTo({ url: 路径 })保留当前页面&…...

【Elasticsearch】index:false

在 Elasticsearch 中&#xff0c;index 参数用于控制是否对某个字段建立索引。当设置 index: false 时&#xff0c;意味着该字段不会被编入倒排索引中&#xff0c;因此不能直接用于搜索查询。然而&#xff0c;这并不意味着该字段完全不可访问或没有其他用途。以下是关于 index:…...

新版IDEA创建数据库表

这是老版本的IDEA创建数据库表&#xff0c;下面可以自己勾选Not null&#xff08;非空),Auto inc&#xff08;自增长),Unique(唯一标识)和Primary key&#xff08;主键) 这是新版的IDEA创建数据库表&#xff0c;Not null和Auto inc可以看得到&#xff0c;但Unique和Primary key…...

输入带空格的字符串,求单词个数

输入带空格的字符串&#xff0c;求单词个数 __ueooe_eui_sjje__ ---->3syue__jdjd____die_ ---->3shuue__dju__kk ---->3 #include <stdio.h> #include <string.h>// 自定义函数来判断字符是否为空白字符 int isSpace(char c) {return c || c \t || …...

C语言程序设计十大排序—希尔排序

文章目录 1.概念✅2.希尔排序&#x1f388;3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅ 1.概念✅ 排序是数据处理的基本操作之一&#xff0c;每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法&#xff0c;排序后的数据更易于处理和查找。在计算机发展…...

Excel制作合同到期自动提醒!

大家好&#xff0c;我是小鱼。 今天分享一下如何利用Excel制作合同到期提醒表&#xff0c;实现Excel表格自动计算合同到期日和天数&#xff0c;根据合同状态和到期天数自动填充颜色提醒&#xff0c;超实用。先看一下效果&#xff0c;已经到期的合同会自动被填充为红色&#xf…...

“AI质量评估系统:智能守护,让品质无忧

嘿&#xff0c;各位小伙伴们&#xff01;今天咱们来聊聊一个在现代社会中越来越重要的角色——AI质量评估系统。你知道吗&#xff1f;在这个快速发展的时代&#xff0c;产品质量已经成为企业生存和发展的关键。而AI质量评估系统&#xff0c;就像是我们的智能守护神&#xff0c;…...

爬虫基础之爬取某基金网站+数据分析

声明: 本案例仅供学习参考使用&#xff0c;任何不法的活动均与本作者无关 网站:天天基金网(1234567.com.cn) --首批独立基金销售机构-- 东方财富网旗下基金平台! 本案例所需要的模块: 1.requests 2.re(内置) 3.pandas 4.pyecharts 其他均需要 pip install 模块名 爬取步骤: …...

使用 Aryn DocPrep、DocParse 和 Elasticsearch 向量数据库实现高质量 RAG

作者&#xff1a;来自 Elastic Hemant Malik 及 Jonathan Fritz 组织依靠自然语言查询从非结构化数据中获取见解&#xff0c;但要获得高质量的答案&#xff0c;首先要进行有效的数据准备。Aryn DocParse 和 DocPrep通过将复杂文档转换为结构化 JSON 或 markdown 来简化此过程&a…...

Couchbase UI: Server

在 Couchbase UI 中的 Server&#xff08;服务器&#xff09;标签页主要用于管理和监控集群中的各个节点。以下是 Server 标签页的主要内容和功能介绍&#xff1a; 1. 节点列表 显示集群中所有节点的列表&#xff0c;每个节点的详细信息包括&#xff1a; 节点地址&#xff1…...

Web3.0时代的挑战与机遇:以开源2+1链动模式AI智能名片S2B2C商城小程序为例的深度探讨

摘要&#xff1a;Web3.0作为互联网的下一代形态&#xff0c;承载着去中心化、开放性和安全性的重要愿景。然而&#xff0c;其高门槛、用户体验差等问题阻碍了Web3.0的主流化进程。本文旨在深入探讨Web3.0面临的挑战&#xff0c;并提出利用开源21链动模式、AI智能名片及S2B2C商城…...

langchain基础(一)

模型又可分为语言模型&#xff08;擅长文本补全&#xff0c;输入和输出都是字符串&#xff09;和聊天模型&#xff08;擅长对话&#xff0c;输入时消息列表&#xff0c;输出是一个消息&#xff09;两大类。 以调用openai的聊天模型为例&#xff0c;先安装langchain_openai库 1…...

【Android】布局文件layout.xml文件使用控件属性android:layout_weight使布局较为美观,以RadioButton为例

目录 说明举例 说明 简单来说&#xff0c;android:layout_weight为当前控件按比例分配剩余空间。且单个控件该属性的具体数值不重要&#xff0c;而是多个控件的属性值之比发挥作用&#xff0c;例如有2个控件&#xff0c;各自的android:layout_weight的值设为0.5和0.5&#xff0…...

RabbitMQ 架构分析

文章目录 前言一、RabbitMQ架构分析1、Broker2、Vhost3、Producer4、Messages5、Connections6、Channel7、Exchange7、Queue8、Consumer 二、消息路由机制1、Direct Exchange2、Topic Exchange3、Fanout Exchange4、Headers Exchange5、notice5.1、备用交换机&#xff08;Alter…...

Qt Enter和HoverEnter事件

介绍 做PC开发的过程中或多或少都会接触到鼠标的悬停事件&#xff0c;Qt中处理鼠标悬停有Enter和HoverEnter两种事件 相同点 QEvent::Enter对应QEnterEvent&#xff0c;描述的是鼠标进入控件坐标范围之内的行为&#xff0c;QEnterEvent可以抓取鼠标的位置&#xff1b;QEvent…...

大语言模型之prompt工程

前言 随着人工智能的快速发展&#xff0c;我们正慢慢进入AIGC的新时代&#xff0c;其中对自然语言的处理成为了智能化的关键一环&#xff0c;在这个大背景下&#xff0c;“Prompt工程”由此产生&#xff0c;并且正逐渐成为有力的工具... LLM &#xff08;Large Language Mode…...

PX4仿真环境下的XTDrone实战:解决roslaunch常见错误的5个技巧

PX4仿真环境下的XTDrone实战&#xff1a;解决roslaunch常见错误的5个技巧 在无人机开发领域&#xff0c;PX4与ROS的结合为开发者提供了强大的仿真和测试平台。XTDrone作为基于PX4和ROS的开源无人机仿真框架&#xff0c;已经成为许多开发者和研究团队的首选工具。然而&#xff0…...

中小企业SEO推广应该投入多少费用

<h2>中小企业SEO推广应该投入多少费用</h2> <p>在数字化时代&#xff0c;网络已经成为企业推广和销售的重要渠道之一。特别是对于中小企业来说&#xff0c;通过优化搜索引擎&#xff08;SEO&#xff09;来提升网站的自然流量&#xff0c;是非常有效且相对经济…...

单片机入门指南:硬件工程师成长路径与实战技巧

1. 单片机入门&#xff1a;从零开始的硬件工程师成长之路作为一名在嵌入式领域摸爬滚打多年的工程师&#xff0c;我见过太多初学者在单片机学习路上走弯路。单片机确实是个神奇的东西——它体积小、价格低&#xff0c;却能控制各种电子设备&#xff0c;从智能家居到工业自动化无…...

ai赋能开发:让快马平台智能生成mpu6050手势识别代码

最近在做一个基于MPU6050传感器的手势识别项目&#xff0c;发现用传统方式开发效率太低&#xff0c;于是尝试了InsCode(快马)平台的AI辅助开发功能。整个过程让我深刻体会到&#xff0c;AI如何改变硬件开发的效率瓶颈。 数据采集模块的智能生成 当我输入"用Arduino持续读取…...

如何通过智能求职助手提升职位时间筛选效率?揭秘高效求职新方法

如何通过智能求职助手提升职位时间筛选效率&#xff1f;揭秘高效求职新方法 【免费下载链接】boss-show-time 展示boss直聘岗位的发布时间 项目地址: https://gitcode.com/GitHub_Trending/bo/boss-show-time 在当今竞争激烈的就业市场中&#xff0c;职位时间筛选已成为…...

如何高效处理大规模地图数据:Google Maps Services Python 并发处理终极指南

如何高效处理大规模地图数据&#xff1a;Google Maps Services Python 并发处理终极指南 【免费下载链接】google-maps-services-python Python client library for Google Maps API Web Services 项目地址: https://gitcode.com/gh_mirrors/go/google-maps-services-python …...

实战演练:在快马平台用codex生成一个完整的react用户管理组件

今天想和大家分享一个实战案例&#xff1a;如何在InsCode(快马)平台用Codex快速生成一个React用户管理组件。整个过程比我预想的顺畅很多&#xff0c;特别适合需要快速原型开发的场景。 项目需求拆解 用户管理是后台系统的标配功能&#xff0c;这次要实现三个核心模块&#xff…...

TrackingNet评估实战:从注册到结果解析

1. TrackingNet评估平台入门指南 第一次接触TrackingNet这个目标跟踪领域的权威评估平台时&#xff0c;我和大多数研究者一样有点懵。这个平台不像GitHub那样有直观的界面&#xff0c;操作流程也相对复杂。不过别担心&#xff0c;跟着我的实战经验走&#xff0c;保证你能少踩8…...

Wan2.2-I2V-A14B实战案例:地方政府生成‘乡村振兴’政策解读动画短视频系列

Wan2.2-I2V-A14B实战案例&#xff1a;地方政府生成乡村振兴政策解读动画短视频系列 1. 项目背景与需求分析 近年来&#xff0c;随着数字政务的快速发展&#xff0c;各级地方政府越来越重视利用新媒体技术进行政策宣传。某地方政府计划开展"乡村振兴"系列政策解读工…...

视频号推客模式系统小程序开发

开发一个基于微信视频号的推客模式系统小程序&#xff0c;需要结合微信生态的开放能力和推客&#xff08;分销&#xff09;模式的业务逻辑。以下是关键开发要点&#xff1a;微信小程序与视频号打通通过微信开放平台的JS-SDK实现小程序与视频号的互联互通。调用wx.openChannelsA…...