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

算法基础(以acwing讲述顺序为主,结合自己理解,持续更新中...)

文章目录

  • 算法的定义
  • 一、基础算法
    • 排序
    • 二分
    • 高精度
    • 前缀和与差分
    • 双指针算法
    • 位运算
    • 离散化
    • 区间合并

算法的定义

这是我从百度上面搜的定义

算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间,空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。

空间复杂度: 其实也就相当于我们用了多少的内存空间

时间复杂度: 也就是执行我们这个算法所要花费的时间

在算法题中,会有对时间和空间(但是空间对我们的限制不大,往往容易卡在时间上面)的要求,所以我们学习算法,必须要了解这个算法对应的时间和空间复杂度,我们写题目的时候往往都是被时间卡了,导致超时

一、基础算法

排序

排序我们知道有很多种排序,但是最常见的其实就十大排序,分别为插入,排序,选择排序,冒泡排序,希尔排序,归并排序,快速排序,堆排序,计数排序,基数排序,桶排序.

由于本人现在学习算法只学习了快速排序和归并排序,所以先讲这两个,平常用的多的也是这两个(后续有时间再补上去)

快速排序: 快速排序的基本思路是在我们给定的数组中,随机选择数组中的某个元素,将大于这个元素的其它元素排到它的右边,小于的排到它的左边,然后递归的进行这个过程,这个递归的过程其实也用到了分治的思想,最后得到的就是我们排好序的数组

下面是代码

void sort(int q[], int l, int r)
{if (l >= r) return;int i = l - 1, j = r + 1, x = q[(l + r) / 2];while (i < j){while (q[++i] < x);while (q[--j] > x);if (i < j) swap(q[i], q[j]);}sort(q, l, j), sort(q, j + 1, r);
}

下面我来讲解一下这段代码,因为我们要用到递归所以我们要设置返回条件,也就是当l>=r的时候就返回,因为这个时候两者都指向的是一个相同的值,说明我们已经将这个数组分到最小的情况,也就是只有一个元素的情况,那么这一个元素也就是已经排好序的情况,我们直接返回就行了

我先来讲一下这个while循环的思路,再讲一下为什么用的是l-1而不是l,我们的思路其实很简单,就是我们不断让i向中间靠拢,直到遇到一个大于x的数,就停下来,因为大于x的数应该是在x的右边而不是左边,同理也让j不断向中间靠拢,最后我们交换两个数的位置就可以了,那么这个循环结束后,x的左边都是小于等于它的,右边都是大于等于它的

那为什么这里用的是l-1呢,因为当我们交换完后,我们需要让 i 指向下一个元素,让j指向它前面的一个元素,所以交换完后要先让 i 进行加一操作,j 进行减一操作,因为我们需要从第一个元素开始比较,所以要让 i 变成 l-1,这样加1后就指向的是我们数组的第一个元素位置

最后进行递归的操作就可以得到我们排好序的数组了

快速排序它因为用到了递归的过程,而我们知道递归是非常占用内存的,所以当数据输入量很大的时候,可能会出现内存不足的情况,并且快速排序在某些情况下时间复杂度是O(n的平方),最优的时间复杂度是(nlogn),这取决于我们函数里的中间值怎么取(也就是x变量),如果取的不好,时间复杂度也很高

那么接下来我就来介绍一个时间复杂度稳定的排序,那就是归并排序

归并排序: 归并排序的时间复杂度是O(nlogn),很稳定,因为在递归的过程,每次都将数组分为两个子块(不论什么情况),但是归并排序需要额外开一个和数据大小相同的数组用来作为中间变量存放我们排好序的值。

二分

高精度

前缀和与差分

双指针算法

位运算

离散化

区间合并

相关文章:

算法基础(以acwing讲述顺序为主,结合自己理解,持续更新中...)

文章目录 算法的定义一、基础算法排序二分高精度前缀和与差分双指针算法位运算离散化区间合并 算法的定义 这是我从百度上面搜的定义 算法&#xff08;Algorithm&#xff09;是指解题方案的准确而完整的描述&#xff0c;是一系列解决问题的清晰指令&#xff0c;算法代表着用系…...

栈实现队列

栈实现队列 用栈实现队列&#xff1a;C 语言代码解析栈的基本实现栈的初始化栈的销毁入栈操作检查栈是否为空出栈操作获取栈顶元素获取栈中元素个数 用栈实现队列队列的创建入队操作出队操作获取队首元素检查队列是否为空队列的销毁 总结 用栈实现队列&#xff1a;C 语言代码解…...

Redis原理与Windows环境部署实战指南:助力测试工程师优化Celery调试

引言 在分布式系统测试中&#xff0c;Celery作为异步任务队列常被用于模拟高并发场景。而Redis作为其核心消息代理&#xff0c;其性能和稳定性直接影响测试结果。本文将深入解析Redis的核心原理&#xff0c;主要讲解Windows环境部署redis&#xff0c;为测试工程师提供一套完整…...

HWDeviceDRM的三个子类,HWPeripheralDRM HWTVDRM HWVirtualDRM

在很多采用 DRM 架构的 Android 平台&#xff08;尤其是 QTI 平台&#xff0c;比如 sdm / display-hal 模块中&#xff09;&#xff0c;HWDeviceDRM 是一个基类&#xff0c;抽象了所有类型的 Display 输出设备的共通 DRM 行为&#xff0c;而它有三个常见的子类&#xff0c;对应…...

金融 IC 卡 CCRC 认证:从合规到业务安全的升级路径

在金融科技飞速发展的当下&#xff0c;金融 IC 卡作为现代金融交易的重要载体&#xff0c;广泛应用于各类支付场景&#xff0c;从日常的购物消费到线上金融理财&#xff0c;其安全性直接关系到用户的资金安全和金融机构的稳定运营。CCRC&#xff08;中国网络安全审查技术与认证…...

微硕WSP6949 MOS管在强排热水器中的应用与市场分析

微硕WSP6949 MOS管在强排热水器中的应用与市场分析 一、引言 强排热水器作为一种常见的家用电器&#xff0c;其核心部件之一是驱动电路&#xff0c;而MOS管作为驱动电路中的关键元件&#xff0c;其性能直接影响到热水器的运行效率和稳定性。微硕半导体推出的WSP6949 MOS管&am…...

文件操作(二进制文件)

C中对文件操作需要包含头文件 #include<fstream> 文件类型分为两类&#xff1a; 1. 文本文件&#xff1a;文件以文本对应的 ASCII 码形式存储在计算机中 2. 二进制文件&#xff1a;文件以文本的二进制形式存储在计算机中&#xff0c;用户一 般不能直接读懂 文件…...

ESP-ADF外设子系统深度解析:esp_peripherals组件架构与核心设计(输入类外设之按键Button)

ESP-ADF外设子系统深度解析&#xff1a;esp_peripherals组件架构与核心设计&#xff08;输入类外设之按键Button&#xff09; 版本信息: ESP-ADF v2.7-65-gcf908721 简介 本文档详细分析ESP-ADF中的输入类外设实现机制&#xff0c;包括按键(button)、触摸(touch)和ADC按键(a…...

HOW - 企业团队自建 npm 仓库

文章目录 一、明确需求二、选型:常用方案三、Verdaccio 搭建步骤1. 安装 Node.js 环境2. 全局安装 verdaccio3. 启动服务4. 配置(可选)5. 用户登录与发布四、团队使用方式1. 使用 `.npmrc` 文件统一配置2. 发布范围包(Scoped packages)五、权限控制六、进阶集成七、测试和…...

键值对和Map的区别

数组里存储键值对和使用Map&#xff08;在不同语言里也被叫做字典、哈希表等&#xff09;存在多方面的区别&#xff0c;下面从多个维度进行分析&#xff0c;同时给出C#和C的代码示例。 区别分析 1. 查找效率 数组存储键值对&#xff1a;查找特定键的值时&#xff0c;通常需要…...

CS61A:STRING REPRESENTATION

Python 规定所有对象都应该产生两种不同的字符串表示形式&#xff1a;一种是人类可解释的文本&#xff0c;另一种是 Python 可解释的表达式。字符串的构造函数 str 返回一个人类可读的字符串。在可能的情况下&#xff0c;repr 函数会返回一个计算结果相等的 Python 表达式。rep…...

AI编程新纪元:GitHub Copilot、CodeGeeX与VS2022的联合开发实践

引言:AI编程时代的到来 在软件开发领域,我们正站在一个历史性的转折点上。GitHub Copilot、CodeGeeX等AI编程助手的出现,结合Visual Studio 2022的强大功能,正在重塑代码编写的本质。这不仅是工具层面的革新,更是开发范式的根本转变。能够有效利用这些AI工具的开发者将跨…...

iOS崩溃堆栈分析

文章目录 一、背景二、获取崩溃日志三、使用 dSYM 文件符号化堆栈信息1. 准备 dSYM 文件2. 符号化方法使用 Xcode使用 atos 命令 一、背景 在 iOS 开发中&#xff0c;分析崩溃日志和堆栈信息是调试的重要环节。上线APP往往只能获取到堆栈信息无法获取到具体的崩溃日志&#xf…...

kafka服务端和springboot中使用

kafka服务端和springboot中使用 一、kafka-sever安装使用 下载kafka-server https://kafka.apache.org/downloads.html 启动zookeeper zookeeper-server-start.bat config\zookeeper.properties 启动kafka-server kafka-server-start.bat config\server.properties创建主…...

05-DevOps-Jenkins自动拉取构建代码

新建Gitlab仓库 先在Gitab上创建一个代码仓库&#xff0c;选择创建空白项目 安装说明进行填写&#xff0c;然后点击创建项目 创建好的仓库是空的&#xff0c;什么都没有 新建一个springboot项目&#xff0c;用于代码上传使用。 只是为了测试代码上传功能&#xff0c;所以代码…...

win7/win10/macos如何切换DNS,提升网络稳定性

本篇教程教您如何在Windows10、Windows8.1、Windows7、MacOS操作系统切换DNS&#xff0c;以提升系统的稳定性&#xff0c;获得更好的操作体验。 Windows10及Windows8.1 1、右键单击“此计算机”&#xff0c;然后选择“属性”。进入Windows系统界面后&#xff0c;选择左侧的“…...

【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——A35M33异核通信测试

1&#xff09;实验平台&#xff1a;正点原子ATK-DLMP257B开发板 2&#xff09;浏览产品&#xff1a;https://www.alientek.com/Product_Details/135.html 3&#xff09;全套实验源码手册视频下载&#xff1a;正点原子资料下载中心 第四章 ATK-DLMP257B功能测试——A35&M33…...

maven如何解决jar包依赖冲突

maven如何解决jar包依赖冲突 1.背景2.报错信息3.解决思路3.1.查找jsqlparser冲突3.2.发现冲突3.2.解决冲突 4.Dromara Warm-Flow 1.背景 在ruoyi-vue项目集成Warm-Flow过程中&#xff0c;需要把mybatis升级为mybatis-plus&#xff0c;按照Warm-Flow常见问题中升级过程&#xf…...

过往记录系列 篇六:国家队护盘历史规律梳理

文章目录 系列文章护盘触发条件与时间规律护盘信号识别特征市场反应规律退出策略历史演变系列文章 过往记录系列 篇一:牛市板块轮动顺序梳理 过往记录系列 篇二:新年1月份(至春节前)行情历史梳理 过往记录系列 篇三:春节行情历史梳理 过往记录系列 篇四:年报月行情历史梳…...

string的模拟实现 (6)

目录 1.string.h 2.string.cpp 3.test.cpp 4.一些注意点 本篇博客就学习下如何模拟实现简易版的string类&#xff0c;学好string类后面学习其他容器也会更轻松些。 代码实现如下&#xff1a; 1.string.h #define _CRT_SECURE_NO_WARNINGS 1 #pragma once #include <…...

多模态思维链AI医疗编程:从计算可持续性到开放域推理的系统性解决方案

多模态思维链AI医疗编程:从计算可持续性到开放域推理的系统性解决方案 医疗AI领域的多模态思维链技术正在重塑临床决策支持、医学影像分析和医疗流程优化的范式。本指南从计算可持续性、错误传播控制、伦理安全防护和通用性扩展四大维度,系统解析医疗大模型落地落地的关键要…...

BTS7960 直流电机控制程序

/*************正转逻辑*****************/ LEN1 REN1 while() { LPWN0 DELAY LPWM1 DELAY } /************反转逻辑******************/ LEN1 REN1 while() { RPWN0 DELAY RPWM1 DELAY } /******************************/ /***2025 测试直流电机正反转past…...

vue3 uniapp vite 配置之定义指令

动态引入指令 // src/directives/index.js import trim from ./trim;const directives {trim, };export default {install(app) {console.log([✔] 自定义指令插件 install 触发了&#xff01;);Object.entries(directives).forEach(([key, directive]) > {app.directive(…...

Mysql-JDBC

JDBCUtils public class JDBCUtils {/*** 工具类的构造方法一般写成私有*/private JDBCUtils(){}//静态代码块再类加载的时候执行&#xff0c;且执行一次static{try {Class.forName("com.mysql.cj.jdbc.Driver");} catch (ClassNotFoundException e) {e.printStackT…...

如何在爬虫中合理使用海外代理?在爬虫中合理使用海外ip

我们都知道&#xff0c;爬虫工作就是在各类网页中游走&#xff0c;快速而高效地采集数据。然而如果目标网站分布在多个国家或者存在区域性限制&#xff0c;那靠普通的网络访问可能会带来诸多阻碍。而这时&#xff0c;“海外代理”俨然成了爬虫工程师们的得力帮手&#xff01; …...

安卓环境搭建开发工具下载Gradle下载

1.安装jdk(使用java语言开发安卓app) 核心库 java.lang java.util java.sq; java.io 2.安装开发工具(IDE)android studio https://r3---sn-2x3elnel.gvt1-cn.com/edgedl/android/studio/install/2023.3.1.18/android-studio-2023.3.1.18-windows.exe下载完成后一步一步安装即…...

k8s+helm部署tongweb7云容器版(by lqw)

安装准备 1.联系销售获取安装包和授权&#xff08;例如&#xff1a;tongweb-cloud-7.0.C.6_P3.tar.gz&#xff09;。 2.已安装docker和k8s集群&#xff0c;参考&#xff1a; k8s集群搭建 3.有对应的docker私库&#xff0c;没有的可以参考&#xff1a; harbor搭建 4.docker已经…...

关于DApp、DeFi、IDO私募及去中心化应用开发的综合解析

一、DApp&#xff08;去中心化应用&#xff09;技术开发 1. 技术架构与开发流程 分层架构 &#xff1a; 前端层 &#xff1a;使用React/Vue.js构建用户界面&#xff0c;通过Web3.js或Ethers.js与区块链交互。 智能合约层 &#xff1a;以太坊系常用Solidity&#xff0c;Solana…...

招贤纳士|Walrus 亚太地区招聘高级开发者关系工程师

职位介绍&#xff1a; 开发者关系团队&#xff08;Developer Relations&#xff09;通过线上线下方式与开发者社区互动&#xff0c;提供专业支持和指导&#xff0c;帮助他们在 Sui 和 Walrus 上构建下一代 Web3 应用。团队通过与社区对话&#xff0c;了解开发者的痛点&#xf…...

Qt实现文件传输客户端(图文详解+代码详细注释)

Qt实现文件传输客户端 1、 客户端UI界面设计2、客户端2.1 添加网络模块和头文件2.2 创建Tcp对象2.3 连接按钮2.3.1 连接按钮连接信号与槽2.3.2 连接按钮实现 2.4 读取文件2.4.1 连接读取文件的信号与槽2.4.2 读取文件槽函数实现2.5 进度条2.5.1 设置进度条初始值2.5.2 初始化进…...

STL详解 - list的模拟实现

目录 1. list 的基本结构 1.1 构造函数 2. 迭代器的实现 2.1 构造函数 2.2 自增和自减操作符 2.3 比较操作符 2.4 解引用和箭头操作符 3. list 容器的实现 3.1 构造函数 3.2 拷贝构造 3.3 赋值运算符重载 3.4 析构函数 3.5 迭代器相关函数 3.6 插入和删除函数 3.…...

ROS 2 的bag

ROS 1 和 ROS 2 的bag包互转方法 1. 安装rosbags工具&#xff1a; 使用pip安装最新版本的rosbags库&#xff08;确保版本大于等于0.9.15&#xff09; pip install rosbags --upgrade 2. db3文件bag包互转&#xff1a;使用rosbags-convert命令进行转换 rosbags-convert --sr…...

微软承认Win11出现极端错误,只能强制关机或重装系统

最近&#xff0c;不少使用 Windows 11 的用户反映&#xff0c;在系统更新后&#xff0c;“Windows Hello”突然失效&#xff0c;原本便捷的人脸识别和PIN登录功能统统无法使用。更糟的是&#xff0c;有人在重置系统后直接被挡在系统门外&#xff0c;这让人不禁发问&#xff1a;…...

bininote: 使用AI将视频转换了Markdown笔记

GitHub&#xff1a;https://github.com/JefferyHcool/BiliNote 更多AI开源软件&#xff1a;发现分享好用的AI工具、AI开源软件、AI模型、AI变现 - 小众AI BiliNote 是一个开源的 AI 视频笔记助手&#xff0c;支持通过哔哩哔哩、YouTube 等视频链接&#xff0c;自动提取内容并生…...

Python自动化办公

第五篇&#xff1a;Python自动化办公&#xff1a;10行代码搞定重复性工作 适合读者&#xff1a;职场人士、数据分析师 | 阅读时长&#xff1a;12分钟 引言 每天重复处理Excel、PDF或邮件&#xff1f;Python可以帮你自动化这些枯燥任务&#xff0c;节省90%的时间。本文通过实际…...

使用 tcpdump 工具,捕获并分析

一、 文章概述 使用 tcpdump 工具&#xff0c;捕获并分析了与 SM-DP&#xff08;Subscription Management Data Preparation&#xff09; 服务器之间进行 TLS&#xff08;Transport Layer Security&#xff09; 握手的过程的数据包&#xff0c;并对其进行了详细解读。 二、 主…...

【LInux网络】socket 编程 - 从ip端口到接口详解

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

MCP:构建大型语言模型与外部系统无缝交互的标准协议架构

目录 引言MCP概述 2.1 MCP的定义2.2 MCP的起源与发展MCP的核心设计原理 3.1 上下文传递与交互3.2 数据安全与隐私保护3.3 统一通信协议MCP架构设计详解 4.1 模块化设计4.2 组件解析 4.2.1 Client Agent4.2.2 Context Manager4.2.3 API Adapter4.2.4 Security Layer4.3 设计原则…...

50常用控件_QPushButton

目录 QPushButton添加图标 QPushButton添加快捷键 代码示例: 按钮的重复触发 使用 QPushButton 表示一个按钮.这也是当前我们最熟悉的一个控件了 OPushButton 继承自 QAbstractButton .这个类是一个抽象类是其他按钮的父类 抽象类 这个类包含了 纯虚函数无法创建出实例(对象…...

Java的ForkJoinPool:深入理解并发编程的利器

在现代软件开发中&#xff0c;多核处理器的普及使得并发编程成为提升应用性能的关键。Java作为一门广泛使用的编程语言&#xff0c;提供了丰富的并发工具&#xff0c;其中ForkJoinPool是Java 7引入的一个强大组件&#xff0c;专为处理可递归分解的任务设计。它通过分治算法和工…...

结合 Python 与 MySQL 构建你的 GenBI Agent_基于 MCP Server

写在前面 商业智能(BI)正在经历一场由大型语言模型(LLM)驱动的深刻变革。传统的 BI 工具通常需要用户学习复杂的界面或查询语言,而生成式商业智能 (Generative BI, GenBI) 则旨在让用户通过自然语言与数据交互,提出问题,并获得由 AI 生成的数据洞察、可视化建议甚至完整…...

道路运输安全员企业负责人考试内容与范围

道路运输企业主要负责人&#xff08;安全员&#xff09;考证要求 的详细说明&#xff0c;适用于企业法定代表人、分管安全负责人等需取得的 《道路运输企业主要负责人和安全生产管理人员安全考核合格证明》&#xff08;交通运输部要求&#xff09;。 考试内容与范围 1. 法律法…...

一体化安全管控平台:消防“一张图”与APP统一管理的创新模式

在科技飞速发展的当下&#xff0c;智慧消防已成为消防救援行业不可阻挡的发展趋势。随着城市化进程的加速&#xff0c;城市规模不断扩大&#xff0c;建筑结构愈发复杂&#xff0c;传统的消防管理模式逐渐暴露出诸多弊端&#xff0c;难以满足现代社会对消防安全的高标准要求。 智…...

利用pnpm patch给第三方库打补丁

如果在使用第三方库的时候, 发现bug, 但是等不了官方补丁, 可以使用pnpm patch给第三方库打补丁来解决, 类似 git diff, 操作如下: 在package.json所在目录的命令行执行 pnpm patch jiaminghi/data-view执行完这个命令后会生成临时文件夹供你编辑, 然后开始编辑这个临时文件夹…...

Spark-SQL(三)

一. 数据加载与保存 1. 数据加载: spark.read.load 是加载数据的通用方法。 spark.read.format("…")[.option("…")].load("…") 1&#xff09;format("…")&#xff1a;指定加载的数据类型。 2&#xff09;load("…"…...

centosu7 二进制安装mysql5.7

一、准备工作 1. 卸载原有MariaDB&#xff08;如有&#xff09; sudo yum remove -y mariadb-libs sudo rm -rf /var/lib/mysql 2. 安装依赖 sudo yum install -y libaio numactl openssl-devel 3. 创建MySQL用户和目录 sudo groupadd mysql sudo useradd -r -g mysql -s…...

生物信息与自动化控制1 - 传感器数据采集与PID 算法的应用

1. 生物过程自动化控制 在生物制药、发酵工程等生物过程中&#xff0c;可以利用生物信息学技术分析生物反应的机理和代谢网络&#xff0c;然后通过自动化控制系统对生物过程进行实时监测和优化控制&#xff0c;以提高生物产品的产量和质量。例如&#xff0c;在发酵过程中&…...

npm包管理工具理解

一、当前维护者&#xff1a;GitHub&#xff08;微软旗下&#xff09; 2018 年&#xff0c;npm 公司被 GitHub 收购&#xff1b; 2020 年&#xff0c;GitHub 被微软收购。 因此&#xff0c;目前 npm 公共仓库由 GitHub 团队负责运维&#xff0c;微软提供底层基础设施支持&#…...

Uniapp 使用Android studio进行离线打包

一.需求 开发Uniapp项目时&#xff0c;使用HBuilderX进行云打包&#xff0c;会经常遇到两个方面的问题&#xff0c;当天的打包的次数受到了限制和打包的时间会比较长&#xff0c;因此&#xff0c;对于离线打包其需求还是比较常见的&#xff0c;这篇文章记录一下对Uniapp的项目…...

mcp和API区别

MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;与传统API&#xff08;Application Programming Interface&#xff0c;应用程序编程接口&#xff09;在技术架构、集成方式和应用场景等方面存在显著差异&#xff0c;以下是主要区别的总结&#x…...