算法——二分法

目录

    • 基本介绍
    • 实现
      • 后继
        • 定义
        • 举例
        • 代码
      • 前驱
        • 定义
        • 举例
        • 代码

基本介绍

二分法是 每次都排除半个区间,然后在剩余的半个区间内寻找解 的方法,排除半个区间的前提是:区间是有序的,这样一来,当解 小于 区间中点时,就可以在 左子区间 寻找;当解 大于 区间中点时,就可以在 右子区间 寻找。当解 等于 区间中点时,根据要求在子区间寻找或返回。

实现

二分法有两种实现:一种是找 前驱,一种是找 后继。在解决实际问题时需要根据问题的要求不同来采取不同的实现。

后继

定义

在单调递增序列中找 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小的元素的位置
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iOS开发新手教程:Swift语言与Xcode工具链

引言 iOS开发是当今软件开发中非常热门的领域&#xff0c;苹果公司提供了强大的开发工具链Xcode和现代化的编程语言Swift&#xff0c;使得iOS应用的开发变得更加高效和简洁。本文将详细介绍iOS开发的基础知识&#xff0c;包括Swift语言和Xcode工具链的使用&#xff0c;帮助新手…

C++:二叉搜索树

概念 二叉搜索树&#xff08;BST - Binary Search Tree&#xff09;是一种特殊的二叉树&#xff0c;每个顶点最多可以有两个子节点。其遵顼以下规则&#xff1a; 若它的左子树不为空&#xff0c;则左子树上所有节点的至都小于根节点的值 若它的右子树不为空&#xff0c;则右子…

怎么将图片批量压缩处理?不牺牲图片清晰度的压缩秘诀

#北京city清凉walk指南# 夏日的北京&#xff0c;满目的绿色和清新空气让人沉醉。 然而&#xff0c;摄影爱好者们在记录这些美好瞬间的同时&#xff0c;也面临着大量图片的存储与管理难题。 随着手机和相机像素的提高&#xff0c;每张照片都可能成为存储空间的"大户&quo…

从0到1开发一个Vue3的新手引导组件(附带遇到的问题以及解决方式)

1. 前言: 新手引导组件,顾名思义,就是强制性的要求第一次使用的用户跟随引导使用应用,可以让一些第一次使用系统的新手快速上手,正好我最近也遇到了这个需求,于是就想着开发一个通用组件拿出来使用(写完之后才发现element就有,后悔了哈哈哈&#x1f62d;&#x1f62d;) 示例图…

Cygwin 安装、CMake 安装

1. cygwin Cygwin安装和验证 http://xiaxveliang.blog.163.com/blog/static/2970803420134693640905/ 如何完美安装 https://blog.csdn.net/u012778714/article/details/74012013 cygwin官网 https://cygwin.com/install.html 命令查询是否安装成功&#xff1a; Administra…

深入理解CSS中的块格式化上下文(BFC)

在Web开发中,CSS的布局机制是构建页面不可或缺的一部分。理解CSS中的各种布局概念对于创建响应式、整洁的网页至关重要。本文将深入探讨CSS中的一个重要概念——块格式化上下文(Block Formatting Context,简称BFC)。 1、什么是BFC? 块格式化上下文(BFC)是Web页面的可视…

【芯片方案】珠宝手机秤方案

珠宝手机秤作为一种便携式电子称重设备&#xff0c;因其小巧、便携、精度高等特点&#xff0c;广泛应用于各种需要精确称重的场景。可能这个目前在国内使用的人比较少&#xff0c;但在西方国家珠宝手机秤却是可以用来送礼的物品。因为珠宝手机秤的外观跟手机外观大多相似&#…

标准盒模型和怪异盒子模型的区别

在 CSS 中&#xff0c;标准盒模型和怪异盒模型是两种不同的盒子模型计算方式&#xff0c;主要区别如下&#xff1a; 一、标准盒模型&#xff08;content-box&#xff09; 1. 定义与组成 - 标准盒模型是 CSS 中默认的盒模型。 - 它由内容区域&#xff08;content&#xff09;、…

顶顶通呼叫中心中间件-打电话没声音检查步骤(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-电话没声音检查步骤(mod_cti基于FreeSWITH) 检查步骤 1、检查配置文件 检查配置文件&#xff1a;打开ccadmin -> 配置文件 -> vars -> external_ip$${local_ip_v4}看一下这个有没有配置正确的外网IP&#xff0c;如果没有配置正确就需要配置正…

PyCharm 2023.3.2 关闭时一直显示正在关闭项目

文章目录 一、问题描述二、问题原因三、解决方法 一、问题描述 PyCharm 2023.3.2 关闭时一直显示正在关闭项目 二、问题原因 因为PyCharm还没有加载完索引导致的 三、解决方法 方法一&#xff1a; 先使用任务管理器强制关闭&#xff0c;下次关闭时注意要等待PyCharm加载完索…

C语言-顺序表

&#x1f3af;引言 欢迎来到HanLop博客的C语言数据结构初阶系列。在这个系列中&#xff0c;我们将深入探讨各种基本的数据结构和算法&#xff0c;帮助您打下坚实的编程基础。本次我将为你讲解。顺序表&#xff08;也称为数组&#xff09;是一种线性表&#xff0c;因其简单易用…

ArcGIS Pro入门制图教程

地理信息系统 (GIS) 是一种使用地图显示和分析数据的方式。在本教程中&#xff0c;您将学习桌面 GIS 应用程序 ArcGIS Pro 的基础知识。 新加坡的一家旅行社希望制作一款宣传册&#xff0c;用于向游客介绍距离市中心热门目的地最近的火车站。该宣传册将与带有文本信息的地图相…

使用 `useAppConfig` :轻松管理应用配置

title: 使用 useAppConfig &#xff1a;轻松管理应用配置 date: 2024/7/11 updated: 2024/7/11 author: cmdragon excerpt: 摘要&#xff1a;本文介绍了Nuxt开发中useAppConfig的使用&#xff0c;它便于访问和管理应用配置&#xff0c;支持动态加载资源、环境配置切换、权限…

软设之观察者模式

设计模式中&#xff0c;观察者模式的意图是:定义对象间的一种一对多的依赖关系&#xff0c;当一个对象的状态发生改变时&#xff0c;所有依赖于它的对象都得到通知并被自动更新。 比如说&#xff0c;有一个新闻网站&#xff0c;订阅的用户众多&#xff0c;假如说管理员发布了一…

使用Open3D处理点云数据:从读取到异常值剔除

在三维计算机视觉和机器人领域&#xff0c;点云数据是理解和分析环境的重要工具。Open3D是一个强大的开源库&#xff0c;它提供了丰富的功能来处理和分析点云数据。今天&#xff0c;我们将通过一段简单的代码示例&#xff0c;展示如何使用Open3D来读取点云文件、估计法线、并剔…

软考:软件设计师 — 2.操作系统

二. 操作系统 1. 操作系统概念 &#xff08;1&#xff09;操作系统的作用 操作系统是计算机硬件之上的第一层软件系统。 操作系统通常用来&#xff1a; 管理系统的硬件、软件、数据资源。控制程序运行。人机之间的接口。应用软件与硬件之间的接口。 可概括为&#xff1a; …

【Linux】内核文件系统系统调用流程摸索

内核层可以看到当前调用文件处理的进程ID 这个数据结构是非常大的&#xff1a; 我们打印的pid,tgid就是从这里来的&#xff0c;然后只需要找到pid_t的数据类型就好了。 下图这是运行的日志信息&#xff1a; 从上述日志&#xff0c;其实我也把write的系统调用加了入口的打印信…

开源项目的深潜:深掘机遇,直面挑战

在科技探索的深邃海洋中&#xff0c;开源项目不仅是一艘破浪前行的旗舰&#xff0c;更是深入未知领域、挖掘技术宝藏的潜水器。它们引领着技术创新的潮流&#xff0c;同时也直面着深海中的未知挑战。本文将深入剖析开源项目所蕴含的深层次机遇与必须克服的严峻挑战&#xff0c;…

CSS3实现彩色变形爱心动画【附源码】

随着前端技术的发展&#xff0c;CSS3 为我们提供了丰富的动画效果&#xff0c;使得网页设计更加生动和有趣。今天&#xff0c;我们将探讨如何使用 CSS3 实现一个彩色变形爱心加载动画特效。这种动画不仅美观&#xff0c;而且可以应用于各种网页元素&#xff0c;比如加载指示器或…

水库大坝安全监测险情主要内容

水库常见险情主要包括洪水漫顶、脱坡滑坡、坝体裂缝、 散浸、渗漏、漏洞、陷坑、管涌等&#xff0c;此外风浪冲击、水流冲刷等也会加剧险情的扩大。大坝险情万一抢护不及时&#xff0c;易导致发 生溃坝事故&#xff0c;造成极为严重的灾难性后果。要做到及时有效地 抢护大坝险情…