自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 回溯算法及其应用

回溯算法是一种常用于解决组合优化问题、搜索问题和决策问题的算法。事实上,回溯正是的副产物,回溯算法就是通过递归实现的算法。他通过遍历所有情况来找到问题的解,若当前方案不可行,就会回溯(回退)并尝试其他可能的路径。和多层嵌套for循环相比,这种递归试错的方法不必设计的for循环,有效减轻了代码的复杂度,有利于算法在大规模的搜索空间中寻找最佳解决方案。回溯算法的本质是所有可能情况,虽然它的时间复杂度可能很高,但在许多复杂情况下,它仍然是一个可行的解决方案。

2023-10-15 20:22:33 665 1

原创 前缀和&差分算法(Python版)

对数组。

2024-04-16 22:00:44 1036

原创 状态机dp(Python)

小蓝有一个保险箱,保险箱上共有 n 位数字。小蓝可以任意调整保险箱上的每个数字,每一次操作可以将其中一位增加 1 或减少 1。当某位原本为 9 或 0 时可能会向前(左边)进位/退位,当最高位(左边第一位)上的数字变化时向前的进位或退位忽略。例如:00000 的第 5 位减 1 变为 99999;99999 的第 5 位减 1 变为 99998;00000 的第 4 位减 1 变为 99990;97993 的第 4 位加 1 变为 98003;99909 的第 3 位加 1 变为 00009。

2024-04-10 15:33:25 565

原创 二分法(蓝桥杯Python组)

二分法(Binary Search)主要用于在有序数组中搜索恰好满足某一边界条件的元素。如果题目所求的答案具有是或者不是两种状态,则说明其可能是二分法的题目。同时还需要注意蓝桥杯通常不会直接出题考察二分法,而是将其内嵌到其他算法中联合考察,该算法往往应用于快速在某一定义域区间中枚举出正确答案。

2024-04-09 15:20:51 877

原创 并查集 + Tarjan算法

并查集是一种用于找出一个森林(图)中树(连通分支)的个数的算法,也可用于判断两个节点是否在同一棵树上。它在每一棵树(连通分支)上选择一个节点作为本棵树(连通分支)的代表。对于给定两个节点,如果他们具有相同的代表节点,则说明两个节点在同一个节点上。

2024-04-05 17:41:43 1008

原创 滑动窗口(尺取法/Python)

在解决关于区间特性的题目时保存搜索区间左右端点,然后根据实际要求不断更新左右端点位置的算法OnO1在历年真题中,滑动窗口主要有求追偿不重复子串和模拟优先队列求区间最值两个作用。

2024-04-03 23:28:25 1255

原创 树状数组学习笔记(Python)

拜读了大佬的讲解博文,写一篇Python版的笔记巩固消化,附带蓝桥杯历年真题作为例题演示。

2024-04-02 23:40:15 779

原创 DFS算法笔记

蓝桥杯中的DFS主要有针对分配过程的DFS和图/树的DFS两种类型,基本是模板题,难度中等。

2024-03-28 20:04:54 744

原创 BFS算法笔记

BFS算法主要有洪水填充(flood fill)和最短路径两个应用。

2024-03-28 20:00:28 1164 1

原创 全排列问题(蓝桥杯Python组)

全排列主要结合DFS求出一个数组中所有数字的排列结果,这个结果往往需要从小到大排列。此外,全排列还经常要求出某一个排列的前一个排列或后一个排列,此时需要用到 pre_permutation() 和 next_permutation()

2024-03-23 20:30:59 1075

原创 蓝桥杯基础数论(Python版)

素数又称质数,一个且只能被1和它本身整除的数被称为素数。对素数的求解往往是解决素数和约数问题的基础。

2024-03-23 20:29:11 1324

原创 动态规划入门题目

动态规划(记忆化搜索):将给定问题划分成若干子问题,直到子问题可以被直接解决。然后把子问题的答保存下来以免重复计算,然后根据子问题反推出原问题解的方法。

2024-01-30 21:41:48 1474

原创 字符串学习笔记

需要注意,用字符串表示的浮点数不能直接转成整型,但用字符串表示的整型可以直接转成浮点数(大范围不能推小范围,小范围可以推大范围)的序列,可以包含字母、数字、符号等字符。Python 允许使用单引号 (') 或双引号 (") 来创建字符串。如果字符串中包含引号,应当确保字符串中使用一种引号,而在外部使用另一种引号,否则将会出现错误。字符串是一种在编程中常用的数据类型,用于表示文本数据。在 Python 中,字符串是。通常使用len()函数求字符串的长度。

2024-01-24 10:16:09 421

原创 列表学习笔记

括号内有两个参数index和data,用于在指定索引处插入元素,如果索引大于列表长度,则直接插入末尾。

2024-01-23 22:03:24 1053

原创 数据结构刷题笔记

数据结构刷题笔记一、绪论通常从四个方面评价算法的质量:可读性、正确性、健壮性、高效性。某算法时间复杂度为O(n*n),说明算法执行时间与n *n成正比,其中n是问题规模逻辑结构主要从数据元素之间的相邻关系考虑。用B=(D,R)表示,其中B表示一种逻辑数据结构,D是数据元素的集合,R是所有关系的集合若某元素没有前驱节点,称其为开始元素,若没有后继节点,称其为终端元素逻辑结构的类型:集合、线性结构、树形结构、图形结构存储结构的类型:顺序存储结构、链式存储结构、索引存储结构、哈希(或散列)存储结构

2024-01-21 18:02:39 1052

原创 Python输入输出流学习笔记

函数用途: 函数input()主要用于接收单个输入函数参数: 函数括号中可以填写输入的提示语(非必要),提示语与输入内容位于同一行运行结果:input函数会将输入默认转换成字符串类型,如果需要接收整型或浮点型变量,则需要使用类型转换函数注意如果输入是浮点数,字符串类型的浮点数(例如"23.4")就不能直接转成整型,否则将会出现报错需要先将其转换成浮点数,然后再转换成整数。但字符串类型的整型(例如"23")可以直接转换成浮点型(23.0)(三)输入数字的进制如果输入的数字是2进制、8进制、16进制

2024-01-21 17:57:10 1108

原创 RISC-V汇编程序设计-计组

RISC-V寄存器功能表(简化版)所要操作的数据均存储于寄存器中,可以直接使用Example:其中,f,g,h,m,n逐个存储于x18~x22中。

2023-12-16 22:34:46 907

原创 RISC-V指令详解-计组

注意:由于I型指令中仅有rs1,没有rs2,所以该类型指令的第二个操作数一定是立即数,第一个操作数一定是用寄存器地址表示。把寄存器rs1的值存入地址为寄存器rs2的值加offset的主存中,其中offset = imm,imm是12位补码。从地址为寄存器rs1的值加offset的主存中读一个双字,注意算式 (rs1+offset) 的寻址单位是。其中offset = imm,imm是12位补码。注意offset是13位有符号数,用补码形式存储。注意offset是20位有符号数,用补码形式存储。

2023-11-28 20:28:34 1421

原创 二维贪心问题

二维贪心问题常见于数组排序等操作中,它往往要求所得结果同时满足两个方面的条件,这两个条件相互之间存在某种关联,可以相互影响。如果仅在一个维度上应用贪心算法很容易顾此失彼,难以得出正确答案。

2023-11-10 20:02:54 280

原创 贪心算法典例 - 分发糖果&加油站 - LeetCode

贪心算法没有固定的解题模版,题目灵活多变,此处笔记不再划分题型,只选取经典题型帮助理解。

2023-11-03 19:41:30 305

原创 贪心算法笔记

贪心算法顾名思义就是每一次做选择时的算法,它的本质就是将问题划分成多个子选择问题,在每一次选择中选择局部最优解,从而达到“全局最优解”。显然,局部最优并不永远等于全局最优,所以贪心算法并不是一种完备的算法(不一定能够找到全局最优解)。

2023-10-26 22:30:00 459

原创 ACM输入输出模式笔记

ACM(ACM国际大学生程序设计竞赛)是一项广泛进行的编程竞赛,旨在考察参赛者在计算机科学和算法方面的能力。在ACM和蓝桥杯等算法竞赛中,所需数据通常使用标准输入的方式给出,参赛者需要自行设计读取数据和输出数据的程序。与之相对应的是LeetCode的,在核心代码模式中,所要实现的功能封装于给定函数中,所需数据可以直接使用,用户只需返回结果即可。

2023-10-24 20:20:09 336 1

原创 回溯算法——全排列问题

给出一个数组,返回所有可能的。其中“全排列”的定义如下:将n个元素按照一定的顺序排列起来,所有的排列情况的集合叫全排列。

2023-10-22 19:53:07 791 1

原创 回溯算法——子集问题

子集问题要求从指定的集合中找出所有满足特定条件的子集,当使用回溯算法解决子集问题的时候,相当于要获得搜索树上所有满足条件节点的值(在组合和切割问题中只求叶子结点的值)

2023-10-19 20:02:09 349

原创 回溯算法——切割问题

这类问题通常会给出一个数组(或字符串),要求列举出所有满足特定条件的。

2023-10-17 20:10:17 179

原创 二叉搜索树

将所要找的值与根节点的值进行比较,如果大于(小于)根节点的值,说明所找元素不可能在左(右)子树,将指针指向右(左)孩子节点,循环操作直到遇到空指针或找到目标节点。返回插入后二叉搜索树的根节点。由于二叉树的有序性,中序遍历二叉树可以按照从小到大的顺序遍历二叉树中的所有元素,如果用数组将每一个被遍历的元素存储起来,就得到了一个存储所有元素的有序数组,可以为后续操作提供便利。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。

2023-10-10 23:11:54 120 1

原创 二叉树的常用方法——递归

二叉树中的递归应用技巧

2023-10-06 20:00:16 147 1

原创 二叉树知识点总结

所有其他层的节点都被完全填满,而且最后一层的节点都尽量靠左排列。若最底层为第 h 层(h从1开始),则该层可能包含 [1, 2。

2023-10-05 17:32:53 202

原创 C++栈与队列知识点总结

(1)队列是STL(C++标准库)中的一种数据结构(2)队列中元素遵循“先进先出”(First In Last Out)原则,简称为FIFO结构,也称先进先出表。(3)队列对外提供push、pop等统一的接口,内部可以选择链表、deque等数据结构实现(但注意不能用vector容器实现,因为数组不能实现pop操作)。由于底层容器的选择不影响队列的使用,且使用者可以自由选择使用何种结构实现队列,因而队列和栈一样具有可插拔的性质,在STL中同样被归类为“容器适配器(container adapter)

2023-10-03 22:44:30 129

原创 N数之和-Leetcode刷题笔记

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。输出:[[-2,-1,1,2],[-2,0,0,2],[-1,0,0,1]]输入:nums = [1,0,-1,0,-2,2], target = 0。不同的三元组是 [-1,0,1] 和 [-1,-1,2]。输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]

2023-10-02 20:55:38 117 1

原创 每日一题(《代码随想录》学习笔记)

给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表。如果两个链表没有交点,返回 null。图示两个链表在节点 c1 开始相交:题目数据保证整个链式结构中。注意,函数返回结果后,链表必须保持其。提示:listA 中节点数目为 mlistB 中节点数目为 n如果 listA 和 listB 没有交点,intersectVal 为 0。

2023-10-01 18:50:47 78

原创 双指针法在链表中的应用(《代码随想录》学习笔记)

在链表中寻找某一元素大多需要通过它的相邻元素才能找到该元素的地址。当我们对该元素进行删除、排序等操作时需要改变这个元素及其相邻元素的指针,但由于程序只能逐条执行,某些间接节点的地址在更改的过程中有丢失的风险,需要另设一个乃至多个指针保存这些将会丢失的地址,以免出现更改一个节点以后找不到下一节点的情况。

2023-09-29 22:02:20 156 1

原创 链表学习笔记

预先不知道线性表需要多大的容量经常对线性表中的元素进行增删操作不经常寻找指定位置的节点。

2023-09-27 21:01:30 138

原创 滑动窗口法(《代码随想录》学习笔记)

当元素和大于等于s时,找到了一个可能满足条件的子数组,记录下此时的子数组长度sublen,再将左指针右移一位,缩小窗口大小并再次检查元素和是否满足条件,如满足,将sublen减一,并重复此过程,直到右指针遍历到尾节点且左指针无法继续右移。这意味着在计算窗口内的状态或信息时,我们不需要重新计算所有元素,只需对新增加或删除的元素进行调整即可。”由于不要求返回满足条件的最小子数组,故仍可使用滑动窗口法,维护两个指针(左指针和右指针),让右指针遍历整个数组,左指针缩小范围,记录下每次的子串长度并不断取较大值。

2023-09-26 19:44:09 199

原创 对撞指针法(《代码随想录》学习笔记)

其中左指针指向数组头元素,右指针指向数组末位元素,两个指针在一定条件下可以相向移动,最终遍历整个数组。由于仅进行一次遍历,该方法时间复杂度为O(n),优势明显。在将数组中所有元素平方(时间复杂度为O(n))以后,若直接使用库函数sort()(时间复杂度为O(nlogn))完成新数组的排序,将会增大算法的时间复杂度。该方法常被称为双指针法,但双指针法类型过多不易记忆和区分,本算法两个指针一左一右相向而行,故将其命名为相向指针法。本题如使用暴力求解则时间复杂度为O(n*n),要想将其优化为O(n),需要运用。

2023-09-24 21:23:03 155 1

原创 快慢指针法(《代码随想录》学习笔记)

使用两个移动速度不相同的指针(快指针fastIndex和慢指针slowIndex)对数组、字符串、链表等线性表进行进行查找、增加、删除和排序等操作,其中快指针往往用于遍历原数组,慢指针往往用于标记新数组以便进行修改等操作,快慢指针法避免了对数组进行两重遍历,将时间复杂度由O(n*n)减为O(n)。本题给出一个特定的值val,要求删除数组中所有值等于val的元素,注意到本题使用传地址引用的方式调用数组,操作需要在原数组上完成,可以使用快慢指针思想。类型数值的打印结果, 对应的十六进制是。

2023-09-23 22:44:37 129

原创 二分查找法(《代码随想录》学习笔记)

while (left < right) { // 因为left == right的时候,在[left, right)是无效的空间,所以使用

2023-09-22 23:07:44 92

原创 C++字符串学习笔记

作为标准输入流,cin在状态为good的时候将会被隐式转换类型为Boolean类型中的TRUE,当且仅当遇到EOF事件或无效输入(如类型错误等,但检测到空格键不属于该范畴,cin将跳过此次输入并返回TRUE)时才会返回FALSE。在这一过程中,编译器将字符串常量理解为字符串中首个字符的地址,并将该字符串中的每个字符在内存中连续排放,当我们创建字符数组的时候,数组名将发挥类似指针的功能,指向首元素的地址。和C语言中的字符数组一样,C++中的字符串也可以使用数组读取的格式读取特定位置的字符。

2023-09-14 19:59:41 194 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除