- 博客(133)
- 问答 (18)
- 收藏
- 关注

原创 Java核心技术 读书笔记
面向对象编程OOP是现在的主流,Java是完全面向对象的。OOP由对象构成,每个对象中有对用户公开的特定功能部分,也有隐藏的实现部分。结构化编程是先考虑算法的设计,再去考虑数据的存储方式。OOP则是先考虑数据的存储方式,再考虑操作数据的算法。使用Java中预先定义的Data类来介绍类的使用方法。现在介绍如何设计复杂应用程序所需要的各种主力类。这些类没有main方法,但是有自己的数据域和实例方法(实例方法不是静态方法)。这些类自己不能运行,通过设计的目的是被调用。
2023-09-06 20:49:11
1123

原创 STL 笔记
改编自STL 分为 容器 迭代器 空间配置器 配接器 算法 和 仿函数命名空间用来解决名称冲突,比如Menci和Fuxey都在自己的头文件里面写了一个work()函数,如果我们需要同时使用这两个函数就会发生名称冲突,但是如果将这两个函数写在单独的命名空间内,就成了Menci::work()和Fuxey::work(),就不会发生命名冲突STL的所有内容都包含在std的命名空间内部如果要调...
2020-05-04 09:53:13
233
3

原创 链表 P309----P316)(单向链表的建立与输出,插入和删除)
采用的时谭c上面的例题:输入一系列学生的成绩,规定学生的学号不为0,按照学号 成绩的顺序输入数据 要求用函数完成传建链表和输出链表的操作代码:(自闭了好一会二才看懂书上的代码)(复制到DEV C++里面,主要看注释)#include<stdio.h>#include<stdlib.h>#include<malloc.h>//#define NULL...
2019-12-14 20:11:41
307
1

原创 gcd函数板子
#include<stdio.h>int gcd(int x, int y){ if(y == 0) return x; if(x < y) return gcd(y,x); else return gcd(y, x%y);} int main(void){ int n1;int n2; whil...
2019-12-10 22:00:56
359

原创 二分查找板子2
//折半查找其实是不需要进行对数组元素的个数为奇数还是偶数进行分开的讨论的(有隐式强制转化) //奇数项会出现中轴与某个边界轴重合的情况,但是不会影响查找//偶数项会出现中轴并不是真正的数组中心(中心根本没有元素),其实是中心靠左的一个元素 #include<stdio.h>int main(void){ int a[110]; int n; scanf("%d",&...
2019-12-06 16:57:33
192

原创 关于队列的基础操作
基本函数1:push 也是在栈顶放入一组元素2: pop 与栈不同的是,队列的pop是在队列的最底端移除一组数据,也就是说,最先放 入队列的元素可以最先被移除,这种行为也被称为FIFO(即先进先出)3: 用queue::front来 访问最低端的数据给出关于的代码:#include<cstdio>#include<queue>using names...
2019-12-03 18:32:17
115

原创 关于栈的基础操作
虽然可以用数组和队列可以轻易地实现栈,但是在c++的函数库里面已经给出了关于栈的函数:1 push 用于在栈的顶端放入一组数据2 pop 用于在栈的顶端取出(移除)一组数据(不能用访问栈顶的数据)3 如果要访问栈顶的数据,就要使用stack::top函数...
2019-12-03 18:20:53
145

原创 特殊的排序——字典排序
给出例子;(其实就是按照每一位的大小进行排序)现有一数列为 1 2 3,则其所有的字典排序为:1 2 3//就像字典的索引一样先按照第一位排序,再按照第二位排序…1 3 22 1 32 3 13 1 23 2 1由此可见一共要排6次序(3!次)当a[2]>a[1]>a[0]时停止排序总的思想就是从初始数列的最右侧开始,直到遍历到一组数对的左边的值小于右边的值,就记...
2019-12-02 19:17:07
303

原创 用递归实现进制的转换
#include<stdio.h>int JZ(int a,int b){ if(a<b) { printf("%d",a%b); return 0; } else { int rest = a % b; ...
2019-12-01 14:14:52
832
原创 560. 和为 K 的子数组(前缀和 + 哈希表)
所以index1处的前缀和如果为sum,那么前面只要出现过 k - sum 的前缀和就表示,有和为k的子数组存在。前缀和的差值可以表示一个区间内的元素的总和。因为,sum - (sum - k)= k。
2023-10-27 19:16:16
227
原创 [每日一题] 2731. 移动机器人 (思维 + 前面元素所有差值求和)
【代码】[每日一题] 2731. 移动机器人 (思维 + 前面元素所有差值求和)
2023-10-10 19:14:29
128
原创 [leetcode 剑指 Offer 29. 顺时针打印矩阵] 方向保持的DFS
【代码】[leetcode 剑指 Offer 29. 顺时针打印矩阵] 方向保持的DFS。
2023-04-06 19:36:56
290
原创 [力扣] 1616. 分割两个字符串得到回文串
首先只考虑 a的前缀 + b的后缀 构成回文串的情况(反过来的解决思路完全相同),采用双指针的思想,左指针从a的左边开始遍历,右指针从b的右边开始遍历,如果要构成回文串,则 a的头部 和 b的尾部一定会存在相同的部分,可以先将最大的a的前缀等于b的后缀的长度找到。在遍历结束后,如果左指针大于等于了右指针,说明,a 和 b的前缀,后缀相同的部分完全可以构成一个完整的字符串,可以直接返回true。
2023-03-18 10:34:43
140
原创 [力扣 2488] 关于数组题目的求解思路
必须还要额外解释一下的是,为什么要用hash表来作为次数记录器,而不是普通的数组,他们的区别在于,hash表实际上不会开很大的数组,比如我要存前缀和为1e9的下表,那么hash就只会增加一个键值对,但是普通数组,就必须开1e9大小的数组,非常浪费空间。所以我们可以将原数组中比K大的数字设为1,比K小的数字设为-1,相等的设为0,这样可以用前缀和的性质来判断区间内的情况。如果出现了两个下标对应的前缀和相等,那么就可以说明这两个下标之间的元素比k大的和比k小的元素数量相等。
2023-03-16 19:17:34
86
原创 L2-035 完全二叉树的层序遍历
#include <iostream>#include <algorithm>using namespace std;const int Maxn = 2e5 + 10;int n;int tree[Maxn]; // 数组模拟好处就是顺序输出数组即为BFS顺序void Create(int t) { // 后序遍历输入数据到树里面即可 if(t > n) { return ; } else { Crea
2021-04-22 16:37:51
204
原创 根据前序遍历结果和中序遍历结果建立二叉树
#include <iostream> #include <algorithm> #include <queue>#include <set>using namespace std;const int Maxn = 100;typedef struct Node { int data = 0; struct Node *Left_node = NULL; struct Node *Right_node = NULL;
2021-04-22 14:53:06
125
原创 BFS 实现指数型递归
// BFS 实现指数型递归#include <iostream>#include <algorithm>#include <string>#include <vector>#include <set>#include <queue>using namespace std;const int N = 100 + 10;int n,k;string str;set<string> s; // 因为
2021-04-08 21:44:39
223
原创 将二叉搜索树的前序遍历结果转换为后序遍历结果 (数据结构)
题目链接:PTA L2-004递归原理分析:普通的二叉树必须同时具备中序遍历序列 + 任意其他序遍历结果才可以进行序列结果的转换,因为必须有中序遍历进行左右子树的划分,但是二叉搜索树因为左子树的值均小于根,右子树的值大于等于根所以可以节点的值进行左右子树的划分Tips : Pre表示前序序列 Post表示后序遍历序列首先分解求后序遍历结果的过程:求出左子树的后序遍历结果求出右子树后序遍历的结果将当前子树的根节点加入后序遍历的结果中去void getPost(int roo.
2021-03-04 19:35:53
946
3
原创 HDU 3461 并查集的应用
这道题最难想到就是区间内同时向上旋转的影响举例子说明:现有字符串:AA 可修改区间为[1,2]第二位可以随便修改,但是第一位无论怎么修改得到的都是等效的序列比如:BA 和 CA等效,CA 和 DA等效等等当是较长的字符串和较长的区间时:如:ABCDEF 可修改区间为[1,3]拿出[1,3]的区间 为 BCD前两位可以随机选择,但是最后一位无论怎么选得到的都是等效的如:ABD 和 ABC等效 ACD 和 ACC等效 但是这两组互不等效为什么前两位可以随便选择呢?其实是因为区间内部是同..
2021-02-08 22:37:34
166
原创 E. Two Platforms
#include <set>#include <map>#include <queue>#include <deque>#include <stack>#include <cmath>#include <vector>#include <string>#include <cstring>#include <iostream>#include <algorithm&
2021-01-24 15:22:38
131
原创 树状DFS理解
题目:题目可以将DFS的每一次进层都想象为树的向下走一层,退层则也是树中的该节点顺着路径向上倒着走一步,主要需要深入思考的是,树的向下走代表什么,向上走代表什么。 这个方法最好的地方在于可以快速确定如何将最后一层得出的结果,一起返回到递归的外面,只要将每一层的DFS都写在(传递)回推墙里面,则一但在某一个节点确定了正确,就可以沿着树的这条路径一直向上倒退至树顶。代码:#include <iostream>#include <algorithm>using namespa
2020-12-14 21:11:00
243
原创 二维费用的背包问题(DP中 01 背包的变形版本)
题目:二维费用的背包问题#include <iostream>#include <algorithm>#define LL long long using namespace std;const int Max = 1e3 + 50;int v[Max],m[Max],w[Max],f[Max][Max],N,M,V;int main(void){ ios::sync_with_stdio(false); cin.tie(0),cout
2020-12-12 22:47:38
174
原创 线段树 (区间和 + 单点操作)
#include <set>#include <map>#include <queue>#include <stack>#include <cmath>#include <vector>#include <string>#include <cstring>#include <iostream>#include <algorithm>#define FAST ios::
2020-12-06 21:49:57
112
原创 GCD + 素数筛实现
题目:GCD问题题目首先考虑最坏的情况,在这N个数字当中,先选出所有的素数 和1 组成最坏集合,这些由素数构成的集合中的任选两个数字的GCD结果都是1,再向这个集合中加入一个其他的数字,则一定会导致存在两个数字其GCD的结果大于1 (抽屉原理?)(但是要注意,当n小于4的时候,1,2,3全部都可以当作素数,则无法向其中再添加数字了)代码:#include <set>#include <map>#include <queue>#include <stac
2020-12-06 15:58:53
168
原创 黑白边 + 克鲁斯卡尔算法
Acwing学习的时候没有给出KrusKal算法的板子,这道题刚好遇到了(Prim算法也可以 ,其实就是没有想到怎么做)克鲁斯卡尔算法伪代码模板:(并查集实现)读入所有的边 将边按照权值进行排序 从权值小的开始,依次将边的两个端点加入并查集中(前提是这两个端点不再同一个并查集里面),最后判断是否存在最小生成树的时候,判断cnt是否等于顶点数n即可。黑色边题目:黑白边题目#include <set>#include <map>#include <queue>
2020-12-06 15:30:34
203
原创 第 K 小数字问题 (优先队列实现)
首先了解优先队列:可以理解优先队列就是一个含有内部排序的队列,具有队列的一切属性,本质上是通过堆来实现的。定义语法:priority_queue<Type, Container, Functional>Type 是数据类型 (注意:数据元素的类型可以是pair类型)Container 由数组实现的一些数据结构,如:vector,deque,不可以是List类型,就是存放元素的容器Functional 是内部排序的方式当使用的数据类型是基本的内置的数据类型的时候就可以直接传入类型来创
2020-12-06 14:53:57
268
原创 二叉搜索树的建立与父亲节点的查询
#include <iostream>#include <algorithm>#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define LL long longusing namespace std;const int N = 1e6 + 10;int num[N],n;typedef struct TreeNode{ int val; TreeNode *LChild,*R
2020-12-03 17:29:06
600
原创 N皇后问题
#include <set>#include <map>#include <queue>#include <stack>#include <string>#include <cstring>#include <iostream>#include <algorithm>#define FAST ios::sync_with_stdio(false)#define LL long longus
2020-12-03 13:44:57
105
原创 求关键路径
虽然可以实现基本的求图的关键路径的功能,但是存在瑕疵,必须保证图的下标最小的节点是整个图的源点,下标最大的节点是整个图的汇点 (工程编码思维)1.求图的拓扑排序#include <iostream>#include <algorithm>#include <queue>#include <set>#include <string>#include <cstring>#include <map>#includ
2020-12-02 21:40:59
127
原创 拓扑排序 + 链式前项星 (教材版本实现)
#include <iostream>#include <algorithm>#include <queue>#include <set>#include <string>#include <cstring>#include <map>#include <stack>#define FAST ios::sync_with_stdio(false)#define LL long longus
2020-12-02 17:11:27
127
原创 在一个很大的数组里面找两个数字使得其和在一定的范围内
题目:这道题只要出现了双重循环,不管如何进行剪枝都会导致TLE。只能使用其他的方法。AC代码(附讲解):首先介绍两个函数:lower_bound 是经常用来对STL容器进行查找的函数,其前两个参数是容器的迭代器类型,分别是,查找范围的 begin() 迭代器 和 查找范围的 end() 迭代器 第三个参数是待查找的数值 num 函数返回的结果是容器中第一个大于等于num的值得下标。upper_bonud 参数如上,函数返回的是第一个 大于 num 的值的下标Tips:1. 这两种查找的方
2020-11-30 21:46:56
364
原创 使用链式前项星实现BFS
依旧是对无向图进行的BFS实现,有向图就只添加一条边就可以了使用样例:#include <iostream>#include <algorithm>#include <cstring>#include <queue>#include <set>#define FAST ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)#define LL long long using n
2020-11-26 15:31:38
136
原创 链式前项星实现图的DFS
实现的是无向图的遍历,有向图只存一条边即可实验图片:#include<iostream>#include<algorithm>#include<set>#include<cstring>#define FAST ios::sync_with_stdio(flase),cin.tie(0),cout.tie(0)#define LL long longusing namespace std;const int N = 1e5 + 10;
2020-11-26 15:04:28
110
原创 2020/11/25 div3 C (不排序使用unique的妙用)
题目:Div3 C主要的思想还是统计每个数字的出现次数,选择出现最少的元素的出现次数作为结果,在读入数字序列的时候要注意连续的两个位置,如果元素相同的话,就不用重复读入,对结果没有任何影响。(这里就用到了unique函数的另外一种用法,一般去重要先sort整个数列,保证有序,这里就不进行sort,直接使用unique函数,这样可以使得任何相邻的两个位置的元素都不会相同)要注意在统计数字的出现次数的时候,开头和末尾的元素的出现都不会被统计。(因为开头的元素即使被选中也不会贡献划分的次数,末尾的元素同理)
2020-11-25 16:34:28
175
原创 扩展欧几里得算法
题目:给定n对正整数ai,bi,对于每对数,求出一组xi,yi,使其满足ai∗xi+bi∗yi=gcd(ai,bi)。输入格式第一行包含整数n。接下来n行,每行包含两个整数ai,bi。输出格式输出共n行,对于每组ai,bi,求出一组满足条件的xi,yi,每组结果占一行。本题答案不唯一,输出任意满足条件的xi,yi均可。数据范围:1 ≤ n ≤ 10^5,1 ≤ ai , bi ≤ 2 ∗10^9输入样例:24 68 18输出样例:-1 1-2 1#include <
2020-11-24 21:26:10
374
空空如也
关于CSMA/CA的问题
2022-03-14
关于基类中的构造函数被继承的问题
2020-09-05
为什么只要我使用free函数在这个程序中 就会导致运行时错误呢?
2020-09-05
关于链表中指针的问题
2020-09-02
关于c++类中的组合类的初始化的问题
2020-08-09
关于类中二义性的问题
2020-08-06
C++关于类中重载运算符的问题
2020-08-02
关于类中的运算符重载中this指针使用的问题
2020-07-31
链表和树的建立的指针问题
2020-05-05
关于不使用fclose的后果
2020-04-20
用delete删除节点后为什么节点的数据任然存在
2019-12-22
使用void函数传入链表头节点并删去头节点无效
2019-12-17
一道用c语言判断素数的题
2019-09-22
大一新生刷题遇到的问题,为什么报错??
2019-09-21
c语言中关于flags的问题
2019-09-19
在printf()语句里面关于flags的疑问
2019-09-19
萌新关于scanf()函数使用%s转换说明时遇到的问题
2019-09-19
关于在打印时出现不匹配的问题?
2019-09-17
TA创建的收藏夹 TA关注的收藏夹
TA关注的人