C++
青鱼29
这个作者很懒,什么都没留下…
展开
-
偏移量的应用-acwing的蛇形矩阵和Z字形扫描
acwing的蛇形矩阵和Z字形扫描原创 2023-02-10 18:45:54 · 166 阅读 · 1 评论 -
关于程序的一些基本知识
1.什么是程序?什么是程序设计?答:程序是为了实现某个目的,所实行的一系列步骤。程序设计是为了实现这个目的,对解决方案的设计。2.为什么需要计算机语言?高级语言的特点?答:(1)为什么需要计算机语言:计算机语言解决了人和计算机交流是的语言问题,使得计算机和人都能识别。(2)高级语言有哪些特点:? 高级语言的数据结构要比汇编和机器语言丰富;? 高级语言与具体机器结构的关联没有汇编以及机器语言密切;? 高级语言更接近自然语言更容易掌握;? 高级语言编写的程序要经过编译或解释计算机才能执行;原创 2022-12-20 21:13:08 · 1082 阅读 · 0 评论 -
面试题:vector、deque和list的区别
vector的特点:deque的特点:deque底层内存是否是连续的??? vector和deque之间的区别: 在中间进行插入和删除,vector和deque哪个效率更高??vector和list的区别:原创 2022-07-10 16:41:15 · 459 阅读 · 0 评论 -
C++ 中左值和右值引用的讲解
//引用和指针的区别 //1. 引用必须初始化,定义指针可以不初始化,但这样可能会造成野指针或者空指针 //2. 引用值只有一级引用,没有多级引用;但指针除了有一级指针外,还有多级指针 //3. 定义一个引用变量和定义一个指针变量,其底层的汇编指令是一样的;通过引用变量修改所引用的内存的值和通过指针的解引用修改变量的值得汇编指令也是一样的...原创 2022-06-28 00:24:36 · 212 阅读 · 0 评论 -
全面掌握const的用法《一》
在C语言中关于const修饰的变量:先来看一段代码: 你们认为这一段代码运行的结果会是什么??运行结果:我们再来看C++中const修饰的变量再来看这一段代码: 运行之后会输出什么呢???输出20 30 20, 在编译这段代码时,代码中所有出现const修饰的变量名字的地方都会被直接替换成了初始值,也就是20。利用指针对a的值进行修改,a的值被改成了30,通过指针的解引用可以找到那块内存区域的值被改成了30;那再来看另外一个代码段 那运行结果肯定就是和C语言一样得了。...原创 2022-06-27 00:59:26 · 193 阅读 · 0 评论 -
详细讲解01背包问题
题目:题解代码:(1)状态f[i][j]定义:前 ii 个物品,背包容量 jj 下的最优解(最大价值):当前的状态依赖于之前的状态,可以理解为从初始状态f[0][0] = 0开始决策,有 NN 件物品,则需要 NN 次决 策,每一次对第 ii 件物品的决策,状态f[i][j]不断由之前的状态更新而来。(2)当前背包容量不够(j < v[i]),没得选,因此前 ii 个物品最优解即为前 i−1i−1 个物品最优解:对应代码:f[i][j] = f[i - 1][j]。(3)当前原创 2022-05-29 00:11:40 · 117 阅读 · 0 评论 -
用代码详细讲解Trie数存储和查询字符串的过程
#include <iostream>using namespace std;const int N = 2e4 + 10;int son[N][26], cnt[N], idx;void insert(char str[]){ int p = 0; for(int i = 0; str[i]; i++) { int u = str[i] - 'a'; if(son[p][u] == 0) son[p][u] = ++i...原创 2022-05-22 01:32:38 · 136 阅读 · 0 评论 -
力扣1448. 统计二叉树中好节点的数目讲解
题目:1448. 统计二叉树中好节点的数目class Solution {public: int dfs(TreeNode* root, int maxv) { //如果链表为空,那就返回一个0 if(root == nullptr) return 0; int res = maxv <= root->val; //如果说maxv <= root->val; 就返回1,否则返回0 //然后ma原创 2022-04-14 00:17:35 · 566 阅读 · 1 评论 -
扩展欧几里得算法的讲解
扩展欧几里得算法:扩展欧几里得算法:对于正整数a, b,一定存在非零整数x, y,使得ax + by = gcd(a, b)。求解x, y的过程:设ax1+by1=gcd(a,b), bx2+(a%b)y2=gcd(b,a%b);由gcd(a,b)=gcd(b,a%b),可得:ax1+by1=bx2+(a%b)y2;即:ax1+by1=bx2+(a-(a/b)*b)y2 =ay2+bx2-(a/b)*by2;即:ax1+by1=ay2 + b(x2-(a/b)*y2)根据恒等定理,...原创 2022-04-13 08:55:18 · 691 阅读 · 0 评论 -
C++实现线性筛法求欧拉函数
题目:代码:#include <iostream>using namespace std;const int N = 1e6 + 10;int primes[N], phi[N], cnt;bool state[N];void get_eulers(int& n) // 线性筛法求1~n的欧拉函数{ phi[1] = 1; for(int i = 2; i <= n; i++) { if(state[原创 2022-04-11 22:04:06 · 1111 阅读 · 0 评论 -
欧几里得算法求解最大公因数详解
关于欧几里得算法的解析:题目:#include <iostream>#include <algorithm>using namespace std;// int gcd(int a, int b)// {// //根据欧几里得算法:g(a, b) = (b, a % b)// return b ? gcd(b, a % b) : a;// 等价于下面的写法 // //if(b == 0) ret..原创 2022-04-06 09:55:35 · 617 阅读 · 0 评论 -
C++实现BFS宽搜解决走迷宫问题
#include <iostream>#include <cstring>using namespace std;const int N = 110;int n, m;typedef pair<int, int> PII;PII q[N * N]; //定义一个队列, 队列里面的元素表示二维数组里面的点int g[N][N]; //用二维数组表示地图int d[N][N]; //d数组里面的下标表二维数组里面的点,值...原创 2022-04-04 08:12:21 · 1183 阅读 · 0 评论 -
C++实现求解n皇后的问题(附力扣51n皇后的求解)
题目:代码讲解:#include <iostream>using namespace std;const int N = 20;char g[N][N]; //需要一个二维数组来表示棋盘bool col[N], dg[N], udg[N]; //n*n棋盘的对角线数量时2n-1int n;void dfs(int u) //传如的参数表述棋盘的行数{ //递归出口:当搜索的行数等于输入的行数时,输出棋盘,结束递归 if(u .原创 2022-03-31 22:42:04 · 1054 阅读 · 0 评论 -
C++是实现字符串哈希
关于字符串哈希:其中需要主义的一个小地方:字符串前缀哈希的题目:代码实现:// 字符串前缀哈希法:#include <iostream>#include <algorithm>using namespace std;// 把字符串看成是一个 P 进制数,每个字符的 ASCII 码对应数的一位// ASCII 范围 0 - 127,最少 128 进制,经验上取 131 或 13331 冲突率低const int N = 100010.原创 2022-03-29 01:09:09 · 2240 阅读 · 0 评论 -
C++实现散列表的模拟
#include <iostream>#include <cstring>using namespace std;const int N = 100003; //找打第一个大于数据范围的质数,冲突范围最小//h[N]是一个槽,是拉链的头节点//e[N]存储每一个节点的值,//ne[N]用来指向下一个节点//idx表示当前用到了几个节点int h[N], e[N], ne[N], idx;//插入操作:void insert(i...原创 2022-03-28 11:25:41 · 1552 阅读 · 0 评论 -
C++ 总结其他进制转换十进制和十进制转换成其他进制
先来看一道题目:很多时候我们都是以十进制为跳板,将n进制的数转换为十进制在转换为m进制,所以掌握这道题目就能解决很多进制的题目啦。代码实现:#define _CRT_SECURE_NO_WARNINGS 1//请你编一程序实现两种不同进制之间的数据转换。#include <string>#include <cmath> //包含了库函数pow#include <iostream>using namespace std;int n = 0.原创 2022-03-27 17:56:17 · 1492 阅读 · 0 评论 -
力扣 94.二叉树的中序遍历
代码解析://二叉树://前序:根->左->右 //根在1号位置//中序:左->根->右 //根在2号位置//后序:左->有->根 //根在3号位置//采用递归的方式:先找到左子树为空的节点(dfs(root->left)),返回这样就可以找到第一个左节点,接着将节点的值放进数组里面即可(ans.push_back(root->val))//接着递归右子树,如果右子树不为空,就将值放进数组里面去,否则就会到上一层c..原创 2022-03-26 22:13:35 · 541 阅读 · 0 评论 -
邻接表-单链表中的操作(插入头节点)讲解
代码讲解:#include <iostream>using namespace std;const int N = 100000 + 10;int e[N], ne[N], head, idx;//初始化:void init(){ head = -1; idx = 0;}//将x插入到头节点上:void add_to_head(int x){ e[idx] = x; ne[idx] = head; head = idx..原创 2022-03-25 16:16:27 · 1232 阅读 · 0 评论 -
C++实现并查集
#include <iostream>using namespace std;const int N = 100000+10;int p[N]; //定义多个集合//查询函数:int find(int x){ if(x == p[x]) return x; else p[x] = find(p[x]); return p[x];}int main(){ int n = 0, m = 0; scanf("%d%d"...原创 2022-03-13 16:46:31 · 1350 阅读 · 0 评论 -
关于Trie树的一些讲解
代码实现:#include <iostream>using namespace std;const int N = 100000+10;//son数组用来构建trie数组,那要注意平时讲课的时候trie数组说要有一个根节点,但其实用代码实现的时候是没有的//cent数组是用来给单词结尾做标记的//idx表明当前使用到了几个节点int son[N][26], cent[N], idx;void insert(char str[]){ int p = 0; ..原创 2022-03-13 11:30:33 · 324 阅读 · 0 评论 -
KMP算法代码的一些解析
题目来源:活动 - AcWing代码解析:#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;const int N = 100000 + 10, M = 1000000 + 10;char p[N], s[M];//关于这里ne数组为甚么长度是N,而不是M,因为在求ne数组的最长相等前缀和后缀时,是模板串自己和自己匹配的过程,所以相等的前后缀也就不会超过Nint ne[N]...原创 2022-03-12 23:46:16 · 126 阅读 · 0 评论 -
关于C++string类的各种用法详细解析
#define _CRT_SECURE_NO_WARNINGS 1#include <string>#include <iostream>using namespace std;//char* 和 string同样能够定义字符串,不过和前者下能比,不必担心内存是否足够、字符串长度等//而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要,我们尽可以把它看成是C++的基本数据类型。void test01(){ //1.声明一个C+.原创 2022-03-02 17:13:01 · 76 阅读 · 0 评论 -
讲解 cin读取数据到vector中会报错的原因
先看这段代码,代码意思是想要将数据读入到容器中。运行后报出一个容器内存越界的错误。解析:这是因为没有初始化容器,所以容器的大小为0,一个没有空间的容器是不能通过下标去接受数值的。改正:既然容器是因为没有初始化内存大小,我们不妨在定义容器的时候调用容器的构造函数,进行赋初值。这样就能正常运行了。注意事项:vector<int> v01;v01.push_back(1);//只能这样赋值,不能用v01[0]=1;不存在内存空间 vector<int.原创 2022-03-02 00:13:32 · 1102 阅读 · 0 评论 -
力扣-无重复字符的最长子串,总结一下本道题的收获
原创 2022-02-26 19:02:44 · 73 阅读 · 0 评论 -
邻接表-单链表代码解析
原创 2022-02-22 14:35:11 · 577 阅读 · 0 评论 -
关于邻接表-双链表的最全解析(附加完整代码)
原创 2022-02-22 14:32:52 · 283 阅读 · 0 评论 -
力扣-三数之和
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>#include <vector>#include <algorithm>using namespace std;class Solution {public: vector<vector<int>> threeSum(vector<int>& nums) { //双指针 vector<vec.原创 2022-02-20 16:54:45 · 406 阅读 · 0 评论 -
C++实现双指针算法
原创 2022-02-01 17:28:16 · 604 阅读 · 0 评论 -
C++函数对象的介绍
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;//类提供了对象的蓝图,所以基本上对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样//创建一个函数对象,本质上是一个类模板//一个函数对象,即一个重载了括号操作符“()”的对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象class myPrint {public: //函数对象通常不.原创 2022-01-20 20:56:32 · 306 阅读 · 0 评论