算法——二分法
目录
- 基本介绍
- 实现
- 后继
- 定义
- 举例
- 代码
- 前驱
- 定义
- 举例
- 代码
基本介绍
二分法是 每次都排除半个区间,然后在剩余的半个区间内寻找解 的方法,排除半个区间的前提是:区间是有序的,这样一来,当解 小于 区间中点时,就可以在 左子区间 寻找;当解 大于 区间中点时,就可以在 右子区间 寻找。当解 等于 区间中点时,根据要求在子区间寻找或返回。
实现
二分法有两种实现:一种是找 前驱,一种是找 后继。在解决实际问题时需要根据问题的要求不同来采取不同的实现。
后继
定义
在单调递增序列中找 x x x 或 x x x 的后继 的定义:在单调递增序列 a
中,如果有 x x x,则找第一个 x x x 的位置;如果没有 x x x,则找比 x x x 大的 第一个数 的位置。
举例
例如对于 a = [1, 2, 4, 4, 6]
,如果要找 4 4 4 或 4 4 4 的后继,则返回 第一个 4 4 4 的索引 2
;如果要找 3 3 3 或 3 3 3 的后继,则返回比 3 3 3 大的 第一个数(即第一个 4 4 4)的索引 2
。
代码
int binarySearch(int[] nums, int target) {int left = 0, right = nums.length - 1; // left, right 分别是区间的左端点和右端点while (left < right) {int mid = left + (right - left >> 1);if (target <= nums[mid]) { // 如果目标值小于或等于区间中点right = mid; // 则在左子区间查找} else { // 如果目标值大于区间中点left = mid + 1; // 则在右子区间查找}}return left; // 返回 第一个target的位置 或 第一个比target大的元素的位置
}
前驱
定义
在单调递增序列中找 x x x 或 x x x 的前驱 的定义:在单调递增序列 a
中,如果有 x x x,则找最后一个 x x x 的位置;如果没有 x x x,则找比 x x x 小的 最后一个数 的位置。
举例
例如对于 a = [1, 2, 4, 4, 6]
,如果要找 4 4 4 或 4 4 4 的前驱,则返回 最后一个 4 4 4 的索引 3
;如果要找 5 5 5 或 5 5 5 的前驱,则返回比 5 5 5 小的 最后一个数(即最后一个 4 4 4)的索引 3
。
代码
int binarySearch(int[] nums, int target) {int left = 0, right = nums.length - 1; // left, right 分别是区间的左端点和右端点while (left < right) {int mid = left + (right - left + 1 >> 1);if (target < nums[mid]) { // 如果目标值小于区间中点right = mid - 1; // 则在左子区间查找} else { // 如果目标值大于或等于区间中点left = mid; // 则在右子区间查找}}return left; // 返回 最后一个target的位置 或 最后一个比target小的元素的位置
}
相关文章:

算法——二分法
目录 基本介绍实现后继定义举例代码 前驱定义举例代码 基本介绍 二分法是 每次都排除半个区间,然后在剩余的半个区间内寻找解 的方法,排除半个区间的前提是:区间是有序的,这样一来,当解 小于 区间中点时,就…...

「PaddleOCR」 模型应用优化流程
PaddleOCR 算是OCR算法里面较好用的,支持的内容多,而且社区维护的好(手把手教你,生怕你学不会),因此在国内常采用。目前已经更新到 2.8版本了,功能更加丰富、强大;目前支持通用OCR、表格识别、图片信息提取…...

VUE2 子组件传多个参数,父组件函数接收所有入参并加自定义参数
需求中有个场景是需要在子组件中传多个参数,让父组件接收所有入参,并且父组件也要加自己的参数 1.子组件传多个参数给父组件 子组件 // 子组件 ChildComponent.vue <template><button click"sendDataToParent">传递数据给父组件…...

less和sass有啥区别哪个更加好
Less 和 Sass(特别是其最流行的变体 SCSS)都是 CSS 预处理器,它们扩展了 CSS 的功能,如变量、嵌套规则、混合(Mixins)、函数等,以编程方式生成 CSS。它们之间的主要区别在于语法、功能和工具生态…...

Qt Design Studio 4.5现已发布
Qt Design Studio现已强势回归,生产力和可用性均得到大幅提升。无论是直观的3D编辑界面,还是与Figma和Qt Creator的无缝连接,新版Qt Design Studio将为您带来更好的产品开发体验。快来深入了解Qt Design Studio的全新功能吧! 为3…...

GCN-LSTM实现时空预测
简介:现有的预测模型越来考虑时间和空间的相关性,统称为时空预测。这种预测模型往往比简单的序列模型(例如RNN、LSTM、GRU及其变体)、Transformer等效果更好。我使用Keras实现了该GCN-LSTM代码,因为Keras相比于torch更容易入手和理解。我实现了一个基于Keras的GCN网络层,…...

《算法笔记》总结No.6——贪心
一.简单贪心 贪心法是求解一类最优化问题的方法,它总是考虑在当前状态下局部最优(或较优)之后,来使全局的结果达到最优(或较优)的策略。显然,如果采取较优而非最优的策略(最优策略可能不存在或是不易想到),得到的全局结果也无法是…...

久期分析与久期模型
目录 一、久期分析的理论原理 二、数据准备 三、Stata 程序代码及解释 四、代码运行结果 一、久期分析的理论原理 久期(Duration)是衡量债券价格对利率变动敏感性的重要指标。它不仅仅是一个简单的时间概念,更是反映了债券现金流回收的平均…...

MybatisPlus 使用教程
MyBatisPlus使用教程 文章目录 MyBatisPlus使用教程1、使用方式1.1 引入依赖1.2 构建mapper接口 2、常用注解2.1 TableName2.2 TableId2.3 TableField MyBatisPlus顾名思义便是对MyBatis的加强版,但两者本身并不冲突(只做增强不做改变): 引入它并不会对原…...

bash: redi-cli: 未找到命令...
问题描述 在执行命令:redi-cli --bigkeys 提示:bash: redi-cli: 未找到命令... 确定服务器是否有Redis进程 ps -ef | grep redis查找Redis 文件信息 find / -name "redis-*"进入到当前目录 cd /usr/bin/再次执行命令 涉及redis-cli 连…...

linux 内核 红黑树接口说明
红黑树(rbtree)在linux内核中使用非常广泛,cfs调度任务管理,vma管理等。本文不会涉及关于红黑树插入和删除时的各种case的详细描述,感兴趣的读者可以查阅其他资料。本文主要聚焦于linux内核中经典rbtree和augment-rbtree操作接口的说明。 1、基本概念 二叉树:每个…...

【ELK】filebeat 和logstash区别
Filebeat 和 Logstash 都是 Elastic Stack (也称为 ELK Stack) 的重要组件,用于日志数据的收集、处理和传输。它们有不同的功能和使用场景: Filebeat 角色: 轻量级日志收集器。功能: 从指定的日志文件中读取日志数据。可以从多个源(如文件、…...

CNN -1 神经网络-概述
CNN -1 神经网络-概述 一:芯片科技发展介绍了解1> 芯片科技发展趋势2> 芯片使用领域3> 芯片介绍1. 神经网络芯片2. 神经网络处理单元NPU(Neural Processing Unit)二:神经网络1> 什么是神经网络2> 神经元3> 人工神经网络三:卷积神经网络(CNN)入门讲解一…...

插片式远程IO模块:Profinet总线耦合器在STEP7配置
XD9000是Profinet总线耦合器,单个耦合器最多可扩展32个I/O模块!本文将深入探讨插片式远程IO模块的应用,并揭秘Profinet总线耦合器在STEP7配置过程中的技巧与注意事项。 STEP7-MicroWINSMART软件组态步骤: 1、按照下图指示安装GSD…...

python3读取shp数据
目录 1 介绍 1 介绍 需要tmp.shp文件和tmp.dbf文件,需要安装geopandas第三方库,python3代码如下, import geopandas as gpdshp_file_path "tmp.shp" shp_data gpd.read_file(shp_file_path) for index, row in shp_data.iterro…...

pytorch实现水果2分类(蓝莓,苹果)
1.数据集的路径,结构 dataset.py 目的: 输入:没有输入,路径是写死了的。 输出:返回的是一个对象,里面有self.data。self.data是一个列表,里面是(图片路径.jpg,标签&…...

Redis实践经验
优雅的Key结构 Key实践约定: 遵循基本格式:[业务名称]:[数据名]:id例:login:user:10长度步超过44字节(版本不同,上限不同)不包含特殊字符 优点: 可读性强避免key冲突方便管理节省内存&#x…...

分类题解清单
目录 简介MySQL题一、聚合函数二、排序和分组三、高级查询和连接四、子查询五、高级字符串函数 / 正则表达式 / 子句 算法题一、双指针二、滑动窗口三、模拟四、贪心五、矩阵六、排序七、链表八、设计九、前缀和十、哈希表十一、字符串十二、二叉树十三、二分查找十四、回溯十五…...

QUdpSocket 的bind函数详解
QUdpSocket 是 Qt 框架中用于处理 UDP 网络通信的类。bind 函数是此类中的一个重要方法,它用于将 QUdpSocket 对象绑定到一个特定的端口上,以便在该端口上接收 UDP 数据包。 函数原型 在 Qt 中,bind 函数的原型通常如下所示: b…...

[spring] Spring MVC - security(下)
[spring] Spring MVC - security(下) callback 一下,当前项目结构如下: 这里实现的功能是连接数据库,大范围和 [spring] rest api security 重合 数据库连接 - 明文密码 第一部分使用明文密码 设置数据库 主要就是…...

数据库数据恢复—SQL Server数据库由于存放空间不足报错的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生…...

spring security的demo
参考: https://juejin.cn/post/6844903502003568647 Spring Security 5.7.0弃用 WebSecurityConfigurerAdapter-CSDN博客 创建 Spring Security 配置类 WebSecurityConfigurerAdapter已被弃用 package com.cq.sc.security.config;import org.springframework.c…...

无需构建工具,快速上手Vue2 + ElementUI
无需构建工具,快速上手Vue2 ElementUI 在前端开发的世界中,Vue.js以其轻量级和易用性赢得了开发者的青睐。而Element UI,作为一个基于Vue 2.0的桌面端组件库,提供了丰富的界面组件,使得构建美观且功能丰富的应用变得…...

通信协议_Modbus协议简介
概念介绍 Modbus协议:一种串行通信协议,是Modicon公司(现在的施耐德电气Schneider Electric)于1979年为使用可编程逻辑控制器(PLC)通信而发表。Modbus已经成为工业领域通信协议的业界标准(De f…...

LabVIEW优化氢燃料电池
太阳能和风能的发展引入了许多新的能量储存方法。随着科技的发展,能源储存和需求平衡的方法也需要不断创新。智慧城市倡导放弃石化化合物,采用环境友好的发电和储能技术。氢气系统和储存链在绿色能源倡议中起着关键作用。然而,氢气密度低&…...

SpringCloudGateway
作用 统一管理,易于监控安全,限流:在网关层就过滤掉非法信息nginx外部网关,gateway内网nginx可以使用Lua或Kong来增强 概念 id:名称随意uri: 被代理的服务地址。id和uri必填,谓词和过滤器非必填谓词:可以…...

Wireshark 对 https 请求抓包并展示为明文
文章目录 1、目标2、环境准备3、Wireshark 基本使用4、操作步骤4.1、彻底关闭 Chrome 进程4.2、配置 SSLKEYLOGFILE [核心步骤]4.3、把文件路径配置到 Wireshark 指定位置4.4、在浏览器发起请求4.5、抓包配置4.6、过滤4.6.1、过滤域名 http.host contains "baidu.com4.6.2…...

如何在Ubuntu环境下使用加速器配置Docker环境
一、安装并打开加速器 这个要根据每个加速器的情况来安装并打开,一般是会开放一个代理端口,比如1087 二、安装Docker https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script 三、配置Docker使用加速器 3.1 修改配置…...

2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片
2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片 1 目标效果视频 CamManager 2 CamManager读取本地文件时序 3 BD_Vision_Utility添加代码 3.0 导入链接库 BD_OperatorSets.dllSystem.Windows.Forms.dllOpencvSharp 3.1 导入VisionParam中创建的文件Util_FileO…...

算法简介:什么是算法?——定义、历史与应用详解
引言 在现代计算机科学中,算法是一个核心概念。无论是编程还是数据分析,算法都扮演着至关重要的角色。在这篇博客中,我们将深入探讨算法的定义、历史背景以及它在计算机科学中的地位和实际应用。 什么是算法? 算法是解决特定问题…...