- 博客(91)
- 收藏
- 关注
原创 关于程序的一些基本知识
1.什么是程序?什么是程序设计?答:程序是为了实现某个目的,所实行的一系列步骤。程序设计是为了实现这个目的,对解决方案的设计。2.为什么需要计算机语言?高级语言的特点?答:(1)为什么需要计算机语言:计算机语言解决了人和计算机交流是的语言问题,使得计算机和人都能识别。(2)高级语言有哪些特点:? 高级语言的数据结构要比汇编和机器语言丰富;? 高级语言与具体机器结构的关联没有汇编以及机器语言密切;? 高级语言更接近自然语言更容易掌握;? 高级语言编写的程序要经过编译或解释计算机才能执行;
2022-12-20 21:13:08 1182
原创 面试题:vector、deque和list的区别
vector的特点:deque的特点:deque底层内存是否是连续的??? vector和deque之间的区别: 在中间进行插入和删除,vector和deque哪个效率更高??vector和list的区别:
2022-07-10 16:41:15 546
原创 C++ 中左值和右值引用的讲解
//引用和指针的区别 //1. 引用必须初始化,定义指针可以不初始化,但这样可能会造成野指针或者空指针 //2. 引用值只有一级引用,没有多级引用;但指针除了有一级指针外,还有多级指针 //3. 定义一个引用变量和定义一个指针变量,其底层的汇编指令是一样的;通过引用变量修改所引用的内存的值和通过指针的解引用修改变量的值得汇编指令也是一样的...
2022-06-28 00:24:36 265
原创 全面掌握const的用法《一》
在C语言中关于const修饰的变量:先来看一段代码: 你们认为这一段代码运行的结果会是什么??运行结果:我们再来看C++中const修饰的变量再来看这一段代码: 运行之后会输出什么呢???输出20 30 20, 在编译这段代码时,代码中所有出现const修饰的变量名字的地方都会被直接替换成了初始值,也就是20。利用指针对a的值进行修改,a的值被改成了30,通过指针的解引用可以找到那块内存区域的值被改成了30;那再来看另外一个代码段 那运行结果肯定就是和C语言一样得了。...
2022-06-27 00:59:26 218
原创 详细讲解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 135
原创 用代码详细讲解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 181
原创 Linux下makefile文件的编写
在学习如何编写makefile文件之前,我们首先需要了解什么是makefile文件:makefile描述了整个工程的编译和链接等规则。它指明了哪些文件需要先编译,哪写文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。makefile的“自动化编译”可以极大的提高软件的开发效率。makefile的基本规则:目标:依赖(tab)命令根据这个命令来编写一个简单的makefile文件:定义了fun1.cpp fun2.cpp head.h 和main.cpp文件,利用这
2022-05-16 11:56:59 4518
原创 gcc工作流程讲解
linux系统中的源文件经过gcc编译器的四个步骤处理,能够生成一个可执行的程序:当然gcc编译器不能独立完成这四个步骤,而是在内部调用了其他工具,从而完成了整个工作流程。在这其中,编译是最耗时的,因为要逐行检查语法。那现在通过Linux中的一个cpp文件来了解其中的编译过程。在linux创建一个test.cpp文件1.预处理阶段:这个阶段会将文件中的头文件展开,宏替换掉,注释去掉,经过(cpp预处理器)预处理后的cpp文件变为一个i文件。gcc -E test.cp.
2022-05-14 07:58:39 1110
原创 力扣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 665 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 747
原创 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 1190
原创 数论中的欧拉函数的讲解
关于欧拉函数的讲解:题目:代码实现:#include <iostream>using namespace std;int main(){ int n = 0; scanf("%d", &n); while (n --) { int x = 0; scanf("%d", &x); int ans = x; for(int i =.
2022-04-07 00:51:15 308
原创 欧几里得算法求解最大公因数详解
关于欧几里得算法的解析:题目:#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 663
原创 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 1358
原创 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 1141
原创 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 2332
原创 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 1589
原创 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 1577
原创 力扣 94.二叉树的中序遍历
代码解析://二叉树://前序:根->左->右 //根在1号位置//中序:左->根->右 //根在2号位置//后序:左->有->根 //根在3号位置//采用递归的方式:先找到左子树为空的节点(dfs(root->left)),返回这样就可以找到第一个左节点,接着将节点的值放进数组里面即可(ans.push_back(root->val))//接着递归右子树,如果右子树不为空,就将值放进数组里面去,否则就会到上一层c..
2022-03-26 22:13:35 597
原创 邻接表-单链表中的操作(插入头节点)讲解
代码讲解:#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 1289
原创 SQL 存储过程中带参数的输出
-- DELIMITER $$-- CREATE PROCEDURE get_unpaid_invoices_for_client-- (-- client_id INT-- )-- BEGIN-- SELECT COUNT(*), SUM(invoice_total)-- FROM invoices i-- WHERE i.client_id = client_id AND payment_total = 0;-- END $$-- DELIMITER ;DR.
2022-03-19 15:35:22 2489
原创 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 1370
原创 关于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 336
原创 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 163
原创 关于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 110
原创 解释C语言中的字符串数组(详细解析)
#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <string.h>//#include <cstdio>//cstdio是将stdio.h的内容用C++头文件的形式表示出来。//stdio.h是C标准函数库中的头文件,即:standard buffered input& output。提供基本的文字的输入输出流操作(包括屏幕和文件等)。由于C语言并没有提供专用于文字输入输出的关.
2022-03-02 16:32:00 4572
原创 讲解 cin读取数据到vector中会报错的原因
先看这段代码,代码意思是想要将数据读入到容器中。运行后报出一个容器内存越界的错误。解析:这是因为没有初始化容器,所以容器的大小为0,一个没有空间的容器是不能通过下标去接受数值的。改正:既然容器是因为没有初始化内存大小,我们不妨在定义容器的时候调用容器的构造函数,进行赋初值。这样就能正常运行了。注意事项:vector<int> v01;v01.push_back(1);//只能这样赋值,不能用v01[0]=1;不存在内存空间 vector<int.
2022-03-02 00:13:32 1199
原创 力扣-三数之和
#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 440
原创 关于Linux git命令里的删除命令的解析
git rm --cached XX:将文件从仓库索引目录中删掉,不希望管理这个文件git restore --staged xx:将xx从暂存区里移除git checkout — XX或git restore XX:将XX文件尚未加入暂存区的修改全部撤销git restore 是在工作区,也就是你电脑上的编辑器上进行修改后,撤回使用的git restore --staged 是你在git add之后提交到暂存区之后,如果你想撤回使用的git rm --cached 是将文件从git索引库
2022-02-18 01:22:51 866
原创 C++实现快速排序
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;int n = 0;const int N = 100000 + 10;int arr[N];//快速排序void quick_sort(int arr[], int l, int r){ if (l >= r) return; int temp = arr[(l+ r) >> 1]; int i = l...
2022-01-24 21:53:24 682
原创 C++谓词介绍
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>#include <algorithm>#include <vector>using namespace std;class GreaterThan{public: bool operator()(const int& val) { return val > 20; }};void test01(){ vector&l.
2022-01-20 21:37:26 304
原创 C++函数对象的介绍
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>using namespace std;//类提供了对象的蓝图,所以基本上对象是根据类来创建的。声明类的对象,就像声明基本类型的变量一样//创建一个函数对象,本质上是一个类模板//一个函数对象,即一个重载了括号操作符“()”的对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般,因此取名叫函数对象class myPrint {public: //函数对象通常不.
2022-01-20 20:56:32 321
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人