【2025-02-26】基础算法:二分查找(二)

📝前言说明:
●本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,主要跟随B站博主灵茶山的视频进行学习,专栏中的每一篇文章对应B站博主灵茶山的一个视频
●题目主要为B站视频内涉及的题目以及B站视频中提到的“课后作业”。
●文章中的理解仅为个人理解。
●文章中的截图来源于B站博主灵茶山,如有侵权请告知。

🎬个人简介:努力学习ing
📋本专栏:python刷题专栏
📋其他专栏:C语言入门基础以及python入门基础
🎀CSDN主页 愚润求学

二分查找

  • 一,视频题目
    • 1,162. 寻找峰值
    • 2,153. 寻找旋转排序数组中的最小值
    • 3,33. 搜索旋转排序数组
  • 二,课后作业
    • 1,1901. 寻找峰值
    • 2,154. 寻找旋转排序数组中的最小值

一,视频题目

1,162. 寻找峰值

●题目:
在这里插入图片描述

●题解:

class Solution:
    def findPeakElement(self, nums: List[int]) -> int:
        left, right = 0, len(nums) - 2
        while left <= right:
            mid = (left + right) // 2
            if nums[mid] > nums[mid + 1]: # 说明[0,mid] 必有一个峰值
                right = mid - 1 # 判断清楚收缩方向
            else: 
                left = mid + 1
        return right + 1

2,153. 寻找旋转排序数组中的最小值

在这里插入图片描述

class Solution:
    def findMin(self, nums: List[int]) -> int:
        # 以数组最后一个数为基准,配合mid来判断最小值的位置
        # 1,如果nums[mid] > nums[-1]: 则最小值一定在mid的右侧(可证),向右收缩
        # 2,如果nums[mid] < nums[-1]: 则最小值一定在mid的左侧,向左收缩
        left, right = 0, len(nums) - 2
        while left <= right:
            mid = (left + right) // 2
            if nums[mid] > nums[-1]:
                left = mid + 1
            else:
                right = mid - 1
        return nums[left] # left 指向的是满足(nums[mid] > nums[-1])的右边一个,又因为最小值在右侧,所以left指向的就是最小值

3,33. 搜索旋转排序数组

在这里插入图片描述
在这里插入图片描述

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        def check(mid:int) -> bool:
            x = nums[mid]
            if x > nums[-1]: # 借助数组最后一个数字间接判断: x是否在target右边
                return target > nums[-1] and x >= target
            else:
                return target > nums[-1] or x >= target
        left, right =0, len(nums) - 1
        while left <= right:
            mid = (left + right) // 2
            if check(mid):
                right = mid - 1
            else:
                left = mid + 1
        return left if nums[left] == target else -1

二,课后作业

1,1901. 寻找峰值

在这里插入图片描述
在这里插入图片描述
暴力解法,若走到一个格子都与周围四个比较,然后选择最大的,最后一定能走到一个峰顶
基于上面的思路,考虑使用二分
先得到某一行的最大值,一该最大值为基础,和上下两行的相邻元素进行比较,分类讨论:
易证得:数值大的元素的那边区间一定会存在一个峰顶(具体分析如下)
在这里插入图片描述

class Solution:
    def findPeakGrid(self, mat: List[List[int]]) -> List[int]:
        left, right = 0, len(mat) - 2
        while left <= right:
            mid = (left + right) // 2
            mx = max(mat[mid]) # 求出该行的最大值
            if mx > mat[mid+1][mat[mid].index(mx)]:
                right = mid - 1
            else:
                left = mid + 1 # left 循环不变量
        return [left, mat[left].index(max(mat[left]))]

2,154. 寻找旋转排序数组中的最小值

在这里插入图片描述
在这里插入图片描述

class Solution:
    def findMin(self, nums: List[int]) -> int:
        left, right = 0, len(nums) - 2
        while left <= right:
            mid = (left + right) // 2
            if nums[mid] == nums[right+1]: # 和区间最后一个元素比较
                right -= 1
            elif nums[mid] < nums[right+1]:
                right = mid - 1
            else:
                left = mid + 1
        return nums[left]

🌈我的分享也就到此结束啦🌈
要是我的分享也能对你的学习起到帮助,那简直是太酷啦!
若有不足,还请大家多多指正,我们一起学习交流!
📢公主,王子:点赞👍→收藏⭐→关注🔍
感谢大家的观看和支持!祝大家都能得偿所愿,天天开心!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/978546.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cherry Studio 使用/训练deepseek

Cherry Studio前言 CherryStudio 是一款集多模型对话、知识库管理、AI 绘画、翻译等功能于一体的全能 AI 助手平台。 CherryStudio的高度自定义的设计、强大的扩展能力和友好的用户体验&#xff0c;使其成为专业用户和 AI 爱好者的理想选择。无论是零基础用户还是开发者&#…

十、大数据资源平台功能架构

一、大数据资源平台的功能架构图总体结构 大数据资源平台功能架构图 关键组件&#xff1a; 1.用户&#xff08;顶行&#xff09; 此部分标识与平台交互的各种利益相关者。 其中包括&#xff1a; 市领导 各部门分析师 区政府 外部组织 公民 开发人员 运营经理 2.功能模…

UE Python笔记

插件 官方 商城 Python Editorhttps://www.fab.com/listings/f4c99ba0-1a86-4f6a-b19d-2fd13f15961b GitHUB 好像只更新到了2020年4.2x的版本。可能有大佬改了5.x的版本。也希望分享给我一份。谢谢 https://github.com/20tab/UnrealEnginePython 学习笔记 网上教程一大堆。…

SQL_优化

1 SQL优化 (1) 数据读取 ①分区裁剪:使用时只读取需要的分区. ②列裁剪:读取操作(select、where、join、group by、sort by等),不读取不需要的列,减少IO消耗. (2) 数据筛选 ①分区先过滤,区分度大的字段先过滤. ②不在筛选字段上使用函数和表达式. (3) 分组聚合 ①使用窗口函数…

centos9之ESXi环境下安装

一、centos9简介 CentOS Stream 9是一个基于RHEL&#xff08;Red Hat Enterprise Linux&#xff09;的开源操作系统。它是CentOS Stream系列的最新版本。CentOS Stream是一个中间发行版&#xff0c;位于RHEL和Fedora之间&#xff0c;旨在提供更及时的软件更新和新功能。CentOS …

Vue2+Element实现Excel文件上传下载预览【超详细图解】

目录 一、需求背景 二、落地实现 1.文件上传 图片示例 HTML代码 业务代码 2.文件下载 图片示例 方式一&#xff1a;代码 方式二&#xff1a;代码 3.文件预览 图片示例 方式一&#xff1a;代码 方式二&#xff1a;代码 一、需求背景 在一个愉快的年后&#xff…

在线会议时, 笔记本电脑的麦克风收音效果差是为什么

背景 最近在线面试. 使用腾讯会议或者飞书, 戴耳机参加在线面试, 遇到好几个面试官说我的音质不好. 一直没在意, 后来反思, 应该是电脑哪里出了问题. 排查 先买了一副品牌有线耳机, 测试后本地录制的声音仍然品质很差去掉耳机延长线后, 麦克风品质仍然很差最终找到答案, 原…

【十二】Golang 映射

&#x1f4a2;欢迎来到张胤尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 映射映射的定义映射初始化make 函数使用字面量 源…

【HarmonyOS Next】鸿蒙TaskPool和Worker详解 (一)

【HarmonyOS Next】鸿蒙TaskPool和Worker详解 &#xff08;一&#xff09; 一、TaskPool和Worker如何实现多线程&#xff1f;各自特点是什么&#xff1f; 在鸿蒙中通过TaskPool和Worker实现多线程并发&#xff0c;两者都基于Actor并发模型实现。 Actor并发模型&#xff0c;每…

FFmpeg.NET:.NET 平台上的音视频处理利器

FFmpeg.NET 是一个封装了 FFmpeg 功能的 .NET 库&#xff0c;能够方便地在 C# 项目中处理音视频文件。它支持多种操作&#xff0c;包括转码、剪辑、合并、分离音频等。 功能 解析元数据从视频生成缩略图使用以下参数将音频和视频转码为其他格式&#xff1a; 码率&#xff08;…

计算机网络————(一)HTTP讲解

基础内容分类 从TCP/IP协议栈为依托&#xff0c;由上至下、从应用层到基础设施介绍协议。 1.应用层&#xff1a; HTTP/1.1 Websocket HTTP/2.0 2.应用层的安全基础设施 LTS/SSL 3.传输层 TCP 4.网络层及数据链路层 IP层和以太网 HTTP协议 网络页面形成基本 流程&#xff1a…

源码压缩包泄露

##解题思路 因为网站的文件都放在www下面&#xff0c;所以直接访问/www.zip就可以得到网页的源码压缩包 在fl000g.txt这个文件中看到一个flag{flag_here}不像是真的flag&#xff0c;尝试提交ctfshow{flag_here}&#xff0c;果然提交失败 打开文件属性之类的&#xff0c;也没有…

组态软件在物联网中的应用

随着物联网的快速发展&#xff0c;组态软件在物联网中的应用也越来越广泛。组态软件是一种用于创建和管理物联网系统的可视化工具&#xff0c;它能够将传感器、设备和网络连接起来&#xff0c;实现数据的采集、分析和可视化。本文将探讨组态软件在物联网中的应用&#xff0c;并…

Java+SpringBoot+Vue+数据可视化的音乐推荐与可视化平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来&#xff0c;还有大家在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望帮助更多的人。 系统介绍 在互联网技术以日新月异之势迅猛发展的浪潮下&#xff0c;5G 通信技术的普及、云计算能力…

(论文)PartialSpoof 数据库和检测话语中嵌入的短假语音片段的对策

The PartialSpoof Database and Countermeasures for the Detection of Short Fake Speech Segments Embedded in an Utterance 摘要 自动说话人验证容易受到各种作和欺骗&#xff0c;例如文本到语音合成、语音转换、重放、篡改、对抗性攻击等。我们考虑一种称为“部分欺骗”…

Leaflet介绍及使用示例

一、Leaflet介绍 Leaflet是一个开源的JavaScript库&#xff0c;专门用于构建交互式的地图应用程序。它以其轻量级、高性能和易于使用的API而著称&#xff0c;方便开发者在网页中集成地图功能。Leaflet支持多种地图提供商的瓦片图层&#xff0c;如OpenStreetMap、Mapbox等&…

【笔记】redis回忆录(未完 重头过一遍)

了解 redis在linux上运行 没有window版本 有也是微软自己搞的 &#xff08;一&#xff09;安装与修改配置 1.在linux虚拟机上 安装gcc依赖 然后再usr/local/src解压在官网下载好的redis安装包 直接拖进去 tar -zxvf 安装包名字 tab键补齐 解压成功 进入软件 并执行编译命令…

使用 Apache Dubbo 释放 DeepSeek R1 的全部潜力

作者&#xff1a;陈子康&#xff0c;Apache Dubbo Contributor 2025年1月20日&#xff0c;国产大模型公司深度求索&#xff08;DeepSeek&#xff09;正式发布了大语言模型 DeepSeek-R1&#xff0c;并同步开源其模型权重。通过大规模强化学习技术&#xff0c;DeepSeek-R1 显著提…

Unity TMPro显示中文字体

TMP默认的字体只能显示英语&#xff0c;那么怎么显示中文呢 1、找到支持中文的字体文件 在c盘搜索Fonts文件夹有很多支持中文的字体文件 我这里选择雅黑 PS.双击打开发现里面有粗体细体普通三个版本&#xff0c;也可以只导入一个版本进去 2、将其拖入到unity Assets里面 3…

【MySQL篇】数据库基础

目录 1&#xff0c;什么是数据库&#xff1f; 2&#xff0c;主流数据库 3&#xff0c;MySQL介绍 1&#xff0c;MySQL架构 2&#xff0c;SQL分类 3&#xff0c;MySQL存储引擎 1&#xff0c;什么是数据库&#xff1f; 数据库&#xff08;Database&#xff0c;简称DB&#xf…