
ACM解题
文章平均质量分 52
CTTACM
这个作者很懒,什么都没留下…
展开
-
数据结构之排序算法
文章目录一 、排序基本概念二、排序算法思路与代码实现2.1 简单排序2.1.1冒泡排序2.2.1 插入排序2.2 先进排序2.2.1快速排序2.2.2 归并排序2.2.3 堆排序2.3 基数排序一 、排序基本概念稳定性:假设两个值(a1,a2a_1,a_2a1,a2)相同,如果经过某一排序算法排序后两值的前后顺序不会发生改变,则称之为稳定排序,否则,为不稳定排序。复杂度:简单排序:时间复杂度为O(n2)O(n^2)O(n2)先进排序:时间复杂度为O(nlogn)O(nlog原创 2020-08-17 21:29:55 · 269 阅读 · 0 评论 -
剑指 Offer 12. 矩阵中的路径
class Solution {public: bool exist(vector<vector<char>>& board, string word) { rows = board.size(); cols = board[0].size(); for(int i = 0; i < rows; i++) { for(int j = 0; j < cols; j++) {原创 2021-01-06 14:37:00 · 223 阅读 · 0 评论 -
数据结构之---树
#include<iostream>#include<string>using namespace std;// 二叉树的遍历算法class Node {public: // 可以看出,c++中class如果不加声明,其默认成员是私有的。 int v; Node* left; Node* right; Node(int vs):v(vs),left(nullptr), right(nullptr){} // 注意这里的{}后不用加分号};typedef stru原创 2020-12-08 21:27:19 · 254 阅读 · 0 评论 -
去除有序数组中重复项(原地)
STL源码剖析:vector<int> v{ 1,1,2,2,3,4,4,5 };int iter = 0;int end = v.size();int result = 0; while (++iter != end) { // 元素不同就记录,否则,就跳过 if (v[iter] != v[result]) v[++result] = v[iter];}v.resize(++result); // 去除了数组末尾废弃的元素。...原创 2020-09-20 17:13:04 · 263 阅读 · 0 评论 -
B+树和红黑树不要搞混了
B+树:用在磁盘文件组织 数据索引和数据库索引。红黑树:c++ STL中的 set 和 mapunordered_map:hash原创 2020-09-19 10:12:09 · 288 阅读 · 0 评论 -
哔哩哔哩编程题
脸滚键盘:#include<iostream>#include<string>#include<unordered_map>using namespace std;int main() { int n; string S; while (getline(cin, S)) { int i = 0; while (S[i] != ' ') { i++; }原创 2020-08-31 19:49:42 · 219 阅读 · 0 评论 -
求1 + 2 +... + n(待续)
代码1:class Solution {public: Solution(){N++; Sum+=N;} static void reset(){N = 0; Sum = 0;} static int getSum(){return Sum;}private: static int N; static int Sum;public: int sumNums(int n) { reset(); Solution *a =原创 2020-08-31 15:21:32 · 157 阅读 · 0 评论 -
c++函数指针作用
代码:#include<iostream>#include<string>using namespace std;// 函数指针使用的函数int max_value(int a, int b){ return (a > b) ? a : b;}//声明函数指针,此时函数指针没有指向任何函数int (*pFun)(int a, int b); int main(int argc, char** argv){ int max1, max2原创 2020-08-30 22:25:22 · 237 阅读 · 0 评论 -
c++ memcpy函数的实现
memcpy函数作用:将由src指向地址为起始地址的连续n个字节的数据复制到以dest指向地址为起始地址的空间内,函数返回一个指向dest的指针特别说明:1.src和dest所指内存区域不能重叠2.与strcpy相比,memcpy遇到‘\0’并不会结束,而是一定会拷贝完n个字节3.memcpy可以拷贝任何数据类型的对象,可以指定拷贝的数据长度4.如果dest本身就有数据,执行memcpy()后会覆盖原有的数据5.dest和src都不一定数组,任意的可读写的空间均可6.如果要追加数据,则原创 2020-08-30 20:24:41 · 1763 阅读 · 2 评论 -
static:类的静态成员
#include<iostream>#include<string>using namespace std;class Account {public: void calculate() { amount += amount * interestRate; } // 成员函数不通过Account::就可以直接访问static成员 static double rate() { return interestRate; } // 这里不允许使用类的非静态成员,原创 2020-08-30 11:20:27 · 174 阅读 · 0 评论 -
c++中的const
const作用修饰变量,说明该变量不可以被改变;修饰指针,分为指向常量的指针(pointer to const)和自身是常量的指针(常量指针,const pointer);修饰引用,指向常量的引用(reference to const),用于形参类型,即避免了拷贝,又避免了函数对值的修改;修饰成员函数,说明该成员函数内不能修改成员变量。const 的指针与引用指针指向常量的指针(pointer to const)自身是常量的指针(常量指针,const pointer)引用指向常量的引用原创 2020-08-29 19:19:31 · 138 阅读 · 0 评论 -
删除链表第k个结点
// 删除链表第k个结点,输出剩余序列#include<iostream>#include<string>#include<vector>using namespace std;struct Node { int v; Node* next; Node(int n) { v = n; next = nullptr; }};int main() { int n, k; while (cin >> n >> k) {原创 2020-08-29 19:29:24 · 322 阅读 · 0 评论 -
关于x&(x-1)的作用
x = x&(x-1):每执行一次x =x&(x-1),会将x用二进制表示时最右边的一个1变为0,因为x-1将会将该位(x用二进制表示时最右边的一个1)变为0。// 判断一个数字的二进制中有几个1#include<iostream>using namespace std;int main() { int x; while (cin >> x) { int count = 0; while (x) { x = x & (x - 1);原创 2020-08-26 15:31:34 · 344 阅读 · 0 评论 -
最大公约数的求法---辗转相除法
辗转相除法:辗转相除法是利用以下性质来确定两个正整数a和b的最大公因子的:1.若r是a÷b的余数,则gcd(a,b)=gcd(b,r)2.a和其倍数之最大公因子为a。3. 0 可以除尽任何数,所以0和任何数的最大公约数都是那个“任何数”另一种写法是:1.a÷b,令r为所得余数(0≤r<b)。若r=0,算法结束;b即为答案。2.互换:置a←b,b←r,并返回第一步。代码:#include<iostream>#include<vector>using na原创 2020-08-26 15:04:31 · 600 阅读 · 0 评论 -
简单的01背包问题
大疆面试的题目,一道01背包的题目只过了50%案例背包问题核心代码:vector<vector<int> > dp(n, vector<int>(n, 0));for (int i = 1; i < n; i++) { // 物品 for (int j = 1; j < n; j++) { // 容量 if (j - volume[i] > 0) { // dp[i][j] = max(dp[i - 1][j], dp[i][j原创 2020-08-26 11:10:20 · 176 阅读 · 0 评论 -
[数据结构]---链表哑结点
关于哑结点解释:使用方法#include<iostream>#include<vector>using namespace std;struct LinkNode { int val; LinkNode* next; LinkNode():val(0), next(nullptr) {} LinkNode(int v) : val(v), next(nullptr) {}};int main() { LinkNode Dum1; LinkNode*原创 2020-08-25 11:32:49 · 530 阅读 · 0 评论 -
c++中的内存对齐讲解
概念与原则:对齐值:基本数据类型的对齐值为其内存大小自定义类型(结构体/类)的对齐值为其类型递归取得的最大基本类型数组的对齐值为其基本类型,并不是整体内存大小偏移地址:第一个数据成员放在offset为0的地方,以后每个数据成员存储的起始位置要从该成员内存大小或者成员的子成员大小(只要该成员有子成员,比如说是数组,结构体等)的整数倍开始(比如int在32位机为4字节, 则要从4的整数倍地址开始存储),基本类型不包括struct/class/uinon。实例:1. 成员变量都是基础数据原创 2020-08-21 11:40:37 · 179 阅读 · 0 评论 -
Linux
在 Linux 中查看 ARP 缓存记录的命令是?正确答案: A 你的答案: 空 (错误)“arp –a”“arp –d”“arp -L”“arp –D”解析:arp -a 查看缓存记录arp -d 删除某些内容原创 2020-08-19 15:10:48 · 311 阅读 · 1 评论 -
循环冗余检验CRC
前提:数据部分M(k个bit) and 商定除数P(n+1),n是冗余码的长度。发送的帧:数据部分+冗余码冗余码求法:M后添加n个0除以商定除数P得到余数R,R即冗余码R = 0,接受R ≠ 0,有错,丢弃例题:设M = 101001(k=6)n = 3,P = 1101冗余码:M∗2n/1101=101001000/1101=110101.....001M*2^n / 1101 = 101001000 / 1101 = 110101.....001M∗2n/1101=101原创 2020-08-18 10:30:42 · 349 阅读 · 0 评论 -
http
超文本传送协议(http)是一个应用层协议,它使用TCP连接进行可靠的传送。统一资源定位符URL:<协议>://<主机>:<端口>/<路径>http的默认端口是80http的URL:http://<主机>:<端口>/<路径>http是面向事务的。事务:事务就是指一系列的信息交换,而这一系列的信息交换是一个不可分割的整体,也就是说,要么所有信息交换都完成,要么一次交换都不进行。通过URL访问页面点击鼠标后发生的事原创 2020-08-18 09:59:41 · 592 阅读 · 0 评论 -
求最短路径
单源最短路径从源点到终点的路径可能存在三种情况:1. 没有路径 2. 只有一条路径 3. 有多条路径迪杰斯特拉(Dijkstra)思路:按照路径长度递增的次序从源点到终点的路径。假设Graph[][]Graph[][]Graph[][]为有向网的邻接矩阵,SSS为已找到最短路径结点的集合,其初始状态为只含一个顶点,即源点。另设一个一维数组Dist[n]Dist[n]Dist[n],其中每个分量表示当前所找到的从源点出发(经过集合S中的顶点)到各个终点的最短路径长度。显然,DistDistDist原创 2020-08-17 16:27:23 · 246 阅读 · 0 评论 -
面试知识点集
数据结构算法图论单源最短路径(迪杰斯特拉算法)组成原理计算机数的表示法计算机操作系统计算机网络运输层TCP运输连接的建立和释放数据库理论设计模式C++基础未解决问题原创 2020-08-17 21:30:20 · 137 阅读 · 0 评论 -
TCP运输连接的建立和释放
运输连接的三个阶段:建立连接数据传送连接释放TCP报文首部字段:序号seq:本报文段所发送的第一个字节的序号。确认号ack:期望收到对方下一个报文的第一个数据字节的序号。例如B正确收到了A发送的一个报文段,其序号字段值是501,而数据长度是200字节(501~700),这表明B正确收到了A发送的到序号700为止的数据。因此,B期望收到A的下一个数据序号为701,于是B在发送A的确认报文中把确认号置为701.- 即:若确认号 = N,表明到序号N-1的所有数据都已正确收到。确认原创 2020-08-16 17:58:18 · 234 阅读 · 0 评论 -
计算机数的表示法
文章理解自这里前提:计算机的运算器中只有加法器没有减法器。数据在计算机中是二进制表示的。想当然的原码表示法:1:用符号位区分正负数2:正数-正数 == 正数 + 正数的相反数:1 - 1 = 1 + (-1) = 0假如我们有一个4位的机器,因为数字有正负数和零值,因此想当然的我们把最高位设置为符号位0代表正数,1代表负数,后面位为二进制数值的表示,例如1:0001,-1:1001,这种表示法即为原码。下面我们来验证原码表示法的实用性:正数+正数:0001+0010=0011 (1+原创 2020-08-16 16:11:11 · 646 阅读 · 0 评论 -
设计模式
单例模式:单例模式的优点:减少内存开支减少系统调用避免资源的多重占用线程安全死锁:某台计算机连接了8个相同的设备,有N个进程在竞争使用,每个进程最多会同时占用3个设备,请问当N大于等于多少时,系统可能发生死锁?用户态&内核态以下哪种操作不会导致计算机从用户态切换至内核态?访问内存时出现缺页异常对一个变量进行取模运算创建一个子进程读取硬盘中文件的内容以下数据库事务的隔离级别中哪一个可能造成脏读读取未提交内容(Read Uncommited)读取提交内容(Read C原创 2020-08-27 14:38:54 · 345 阅读 · 0 评论 -
计算机网络
TCP协议在常见的七层网络模型中属于哪一层?UDP是一种无连接的网络协议,那么一下哪个选项不是UDP协议报头的内容?序号(Sequence Number)源端口号(Source port)和目标端口号(Destination port)报文长度(Length)校验和(Checksum)...原创 2020-08-13 21:56:54 · 664 阅读 · 0 评论 -
操作系统
如果想列出当前目录以及子目录下所有扩展名为“.txt”的文件,那么可以使用以下哪个命令?find . -name “.txt"grep “.txt” -r *ls ".txt”less “*.txt”原创 2020-08-13 21:56:37 · 733 阅读 · 0 评论 -
C++面试知识点搜集
c++的类型转换extern "C"的用法? extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。 由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般只包括函数名。 比如说你用C 开发了一个DLL 库,为了能够让C ++语言也能够调用你的DLL输原创 2020-08-19 15:49:19 · 246 阅读 · 0 评论 -
泛型算法之-排序
实现简单的vector的逆序排序和去重#include <iostream>#include <vector>#include <algorithm>using namespace std;bool comp(int a, int b){ return a > b;}int main(){ int n; int i; cin&...原创 2020-03-07 10:46:50 · 243 阅读 · 0 评论 -
牛顿法算平方根的理解
原题目:x 的平方根查看题解,使用到了牛顿法。公式:作者已经讲得很清楚了,只是看这里的公式中的xxx和x0x_0x0的时候卡了一下,后来理解了,其实x0x_0x0就是进行尝试的起始点,然后进行图中的迭代公示后得到的x0x_0x0(其实就是所求的xxx)是下一次的起始点,在图中就是那条斜线与xxx轴的焦点的位置。那么,如果一个值的平方考虑到可能会溢出的话,如何避免计算平方值呢?代码中写...原创 2019-12-23 17:58:15 · 210 阅读 · 0 评论 -
夏泽网注册
http://nianjian.xiaze.com/tags.php?/%E6%BA%A7%E9%98%B3%E5%B9%B4%E9%89%B4/1/13502071889/原创 2017-08-07 10:14:12 · 578 阅读 · 0 评论 -
史上最全的英语连读规则一网打尽
原文地址:http://blog.youkuaiyun.com/yuankaining/article/details/4514203(此处为人肉维护的镜像,不保证完整复制内容到这里,也不保证及时修订错误。原文请见:http://csbabel.wordpress.com/ 翻墙请用Google Reader查看:http://csbabel.wordpress.com/feed/)转载 2016-08-20 10:20:02 · 5494 阅读 · 0 评论 -
printf背后的故事
printf背后的故事 说起编程语言,C语言大家再熟悉不过。说起最简单的代码,Helloworld更是众所周知。一条简单的printf语句便可以完成这个简单的功能,可是printf背后到底做了什么事情呢?可能很多人不曾在意,也或许你比我还要好奇!那我们就聊聊printf背后的故事。一、printf的代码在哪里?显然,Helloworld的源代码需要经过编转载 2015-09-13 12:28:19 · 606 阅读 · 0 评论 -
敌兵布阵(树状数组模板题)
敌兵布阵Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 59430 Accepted Submission(s): 25101Problem DescriptionC国的死对头A国这段时间正在进行军事演习,所以C国原创 2015-08-12 17:39:18 · 638 阅读 · 0 评论 -
Eddy's research I
Eddy's research ITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7605 Accepted Submission(s): 4620Problem DescriptionEddy's interes原创 2015-08-04 18:41:47 · 935 阅读 · 1 评论 -
选择排序
#includeusing namespace std;int a[1000];int main(){ int n; while(cin>>n) { for(int i = 0; i != n; i ++) cin>>a[i]; for(int i = 0; i!= n-1; i ++) { int k = i,j; for( j = i + 1; j原创 2015-07-23 17:59:00 · 531 阅读 · 0 评论 -
Latex模板样例(1)
% -*- coding: utf-8 -*-%%%% 本模板可以使用以下两种方式编译:%% 1. PDFLaTeX%% 2. XeLaTeX [推荐]%% 注意:%% 1. 在改变编译方式前应先删除 *.toc 和 *.aux 文件,%% 因为不同编译方式产生的辅助文件格式可能并不相同。\documentclass{cumcmart}%\转载 2015-07-23 11:09:23 · 6549 阅读 · 2 评论 -
sscanf()函数
算法入门经典中提到一种函数sscanf()用法如下:#include#includeusing namespace std;int main(){ char a[100]; while(cin>>a) { int v; sscanf(&a[0],"%d",&v); cout<<a<<endl; cout<<v<<endl; } return 0;} 其原创 2015-07-07 14:58:59 · 661 阅读 · 0 评论 -
vim模式介绍
vim模式介绍以下介绍内容来自维基百科Vim从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆。几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数的编辑器使用了与Vim截然不同的方式:命令目录(鼠标或者键盘驱动),组合键(通常通过control键(CTRL)和alt键(ALT)组成)或者鼠标输入。Vim和vi一样,仅仅通过键盘来在这些模式之中切换。这就使得转载 2015-07-08 16:55:44 · 871 阅读 · 0 评论 -
1、cin 1、cin.get() 2、cin.getline() 3、getline() 4、gets() 5、getchar()
1、cin 1、cin.get() 2、cin.getline() 3、getline() 4、gets() 5、getchar()1、cin>> 用法1:最基本,也是最常用的用法,输入一个数字:#include using namespace std; main () { int a,b; cin>>a>>b; cout输入:2[回车]3[回车] 输出:5转载 2015-07-09 14:49:21 · 470 阅读 · 0 评论