- 博客(20)
- 收藏
- 关注
原创 初探DFS BFS
一、基本概念深度优先搜索(Depth-First Search)是一种用于遍历或搜索树或图的算法。它的核心思想是:沿着一条路径尽可能深地探索,直到到达末端然后回溯到上一个分叉点,选择另一条路径继续探索使用栈(递归或显式栈)来记录访问路径二、算法特点核心特性:深度优先:优先探索最深的节点回溯机制:遇到死胡同时返回上一节点记忆访问:避免重复访问同一节点。
2025-12-18 20:31:01
389
原创 栈,队列,单调栈
给出两个序列 pushed 和 poped 两个序列,其取值从1到nn≤100000。已知入栈序列是 pushed,如果出栈序列有可能是 poped,则输出Yes,否则输出No。请注意,给定的序列一定是一个(即没有重复数字)。为了防止骗分,每个测试点有多组数据,不超过5组。
2025-11-18 19:05:18
440
原创 递归分治53
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6。
2025-11-09 19:37:23
127
原创 贪心算法,优先队列(大小根堆使用)
贪心算法在每一步选择中都采取在当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。简单来说,就是“每一步都只看眼前利益,做出当前最好的选择,不考虑长远”。核心:每一步都选择当前最优解。关键:问题必须具有贪心选择性质和最优子结构。难点:如何选择和证明贪心策略的正确性。座右铭:“活在当下”,但前提是“当下”的选择能通向往“美好的未来”。#include <functional> // 需要包含这个头文件// 小根堆的定义方式// 输出 1 (当前最小值)
2025-11-08 20:55:14
753
原创 二分查找?
伐木工人 Mirko 需要砍M米长的木材。对 Mirko 来说这是很简单的工作,因为他有一个漂亮的新伐木机,可以如野火一般砍伐森林。不过,Mirko 只被允许砍伐一排树。Mirko 的伐木机工作流程如下:Mirko 设置一个高度参数H(米),伐木机升起一个巨大的锯片到高度H,并锯掉所有树比H高的部分(当然,树木不高于H米的部分保持不变)。Mirko 就得到树木被锯下的部分。例如,如果一排树的高度分别为201510和17,Mirko 把锯片升到15米的高度,切割后树木剩下的高度将是15。
2025-10-10 18:47:47
809
原创 Huffman树(笔记)
哈夫曼树的目标:在给定一组权值时,构造出一棵二叉树,使得 WPL 最小。带权路径长度 (WPL):所有叶子节点的路径长度 × 权值的总和。保证 前缀编码(任一编码都不是另一个编码的前缀),避免歧义。哈夫曼树是一种 带权路径长度最短 的二叉树(最优二叉树)权值 (Weight):通常是数据出现的频率或概率。频率高的字符 → 路径短 → 编码更短。频率低的字符 → 路径长 → 编码更长。从根到叶子的路径就对应了该字符的编码。路径长度:从根到某个节点的边数。左子树记为 0,右子树记为 1。
2025-08-17 22:47:08
221
原创 并查集(笔记)
并查集(Disjoint Set Union,DSU)是一种用于管理元素分组情况的数据结构,主要用于处理不相交集合的合并与查询问题。Union Find 适合动态连通性问题,尤其是大规模数据,因其高效的平均时间复杂度。Quick Find 适合 find 操作频繁,但 union 操作较少的场景。union O(logN)(按秩合并优化后接近O(1))合并时,总是将较小的树挂到较大的树下,避免树过高。合并时,总是将较小的树挂到较大的树下,避免树过高。合并(Union):将两个集合合并为一个集合。
2025-08-16 17:24:24
213
原创 平衡二叉树笔记
AVL平衡⼆叉树很好的解决了⼆叉搜索树在遇到有序序列性能退化为O(N)的情况,使得在最坏情况下的搜索效率仍然能够达到O(logN),但这种优化是牺牲了插⼊和删除的性能换来的。因此AVL树并不适合需要频繁插⼊和删除的场景,⽽红⿊树则是权衡了这种情况,其并不强调严格的平衡性,⽽是保持⼀定的平衡性,从⽽使得在搜索,插⼊,删除的场景下均有⼀个不错的速度。
2025-08-13 14:07:42
884
原创 C++中的[STL]
C++的面向对象和泛型编程思想,目的就是复用性的提升。大多数情况下。数据结构和算法都未能有一套标准,导致从事大量重复工作,为了建立数据结构和算法的一套标准,STL诞生STL(Standard Template Library) 标准模板库从广义上分为,容器,算法,迭代器。容器和算法之间通过迭代器进行无缝衔接STL六大组件:容器,算法,迭代器,仿函数,适配器(配接器),空间配置器1,容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。
2025-08-03 22:24:56
947
原创 C++文本操作
程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放通过文件操作可以将数据持久化C++中对文件操作需要包含头文件**文件类型分为两种:文件以ASCII码形式存储在计算机中文本文件二进制文件:文件以文本的二进制形式存储在计算机中,不需要读懂操作文件的三大类:1.ofstream:写操作2.ifstream:读操作3.fstream:读写操作。
2025-06-29 22:41:36
271
原创 c++中引用和new
/内部自动转化为 int* const ref = &a;// 内部发现ref引用, 自动转化为:*ref = 20;如果函数只想要做某一个操作,为了防止误操作,为保证其安全性,可以使用常量引用,在此函数中不可修改。//引用传递,形参会修饰实参。//地址传递,形参会修饰实参。引用的本质:引用的本质在c++内部实现是一个指针常量。例如:int* p = new int(10);//例2,返回静态变量引用,函数可以作为左值。
2025-05-07 17:55:11
350
原创 c++字符数组的输入和输出
当使用cin,cout时,当字符串中有空格,则不能输出空格以后的字符,cin与scanf类似,遇到空格或\n时停止。此时可以使用,gets,puts,fgets。
2025-02-26 16:34:43
157
原创 rand随机数
若要两位数,%100;要0~1之间的浮点数 /double(RAND_MAX)。头文件<cstdlib> <ctime>1~2之间的一位小数 %10 /10.0。注意:有循环时,种子要“种”在外面。
2025-02-25 21:31:54
125
原创 【无标题】c++中string
string类处理字符串:头文件<string>。例子中定义的str是string类的一个对象,size()是string类的方法,未初始化的string对象长度为零。string类处理字符串会根据字符串的长度自动调节自己的大小。且字符串可以直接相加来拼接字符串。而用数组时,函数getline()是istream类的一个方法,cin是一个istream类的对象。
2025-02-19 21:55:41
803
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅