自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(100)
  • 收藏
  • 关注

原创 取模(%)

职能作用于两个整型数(正整数、负整数),运算结果是两数相除后的余数,运算结果为整数。所以, i % k = (i + n * k) % k, n属于整数。(2)被除数小于除数时,运算结果等于被除数。取绝对值,再%,结果加上被除数的符号。(1)运算结果正负号与。

2024-01-23 09:55:00 456

原创 gcd(求解最大公约数)

我来介绍一下这个算法的优点,就是避免了大整数取模导致效率低下,但是运算次数要比辗转相除多得多,所以我们在使用的时候需要判断一下。但是大整数取模会让一些题极为头疼,所以我们还是要慎重考虑什么时候用更相减损什么时候用辗转相除。两个正整数a和b(a>b),它们的最大公约数等于a-b的差值c和较小数b的最大公约数。两个正整数a和b(a>b),它们的最大公约数等于a除以b的余数c和b之间的最大公约数。其实就是把更相减损变得更高级一点(加减运算变乘除运算,提升了一个级别)

2024-01-23 09:54:03 435

原创 KMP算法

优点:指向被查找数组的指针i,从头遍历到尾(不反复),指向目标数组的指针j,通过nxt数组,当匹配过程中,遇到不相同/后找到目标字符串时,跳到合适的位置;//找到最长的前后缀重叠长度。作用:当匹配过程中,遇到不相同/后找到目标字符串时,则将 j(指向目标数组的指针)= nxt[j],继续匹配。定义:nxt[i]存储目标数组的前i - 1项的最长相同前后缀的长度;

2024-01-23 09:51:37 417

原创 二分查找算法

空间 <------> 时间。二分查找《——f[x]:数组<------> f(x):函数——》二分答案。则mid = (head + tail) / 2 == head;2.f[x] = y, y --> x难, x-->y 易;要用mid = (head + tail + 1) >> 1。1.查找第一个1 == 查找第一个大于target的数;2.查找最后一个1 == 查找最后一个大于target的数。边界条件:当head == tail + 1;初始条件:head = 0, tail =

2024-01-23 09:50:12 849

原创 单调队列与单调栈

RMQ(Range Minimum/Maximum Query)问题,是求区间最大值或最小值,即范围最值问题定义:队内元素保持单调性的队列,队首元素永远是最小值或最大值。操作:⼊队操作: 队尾⼊队,会把之前破坏单调性的元素都从队尾移出(维护单调性)出队操作: 如果队首元素超出区间范围,就将元素从队首出队元素性质: 队首元素,永远是当前维护区间的(最⼤/最小)值序列中的每⼀个元素,在依次⼊队的过程中,每个元素都入队和出队过适用问题:1.滑动窗口的最大/最小值维护。

2024-01-23 09:48:18 817

原创 递归转非递归

设R是集合X上的偏序(Partial Order),如果对每个x,y属于X必有xRy 或 yRx,则称R是集合X上的全序关系。若集合X上的关系是R,且R是自反的、反对称的和传递的,则称R是集合X上的偏序关系。2.处理当前队首节点,将队首节点有向边指向的所有节点的入度减一,并将入度为一的节点入队(bfs)比较简单的理解:偏序是指集合中只有部分成员可以比较,全序是指集合中所有的成员之间均可以比较。自己模拟的栈可以开辟在堆上,它的空间可以是整个电脑的内存,相比于系统栈更大,减少了爆栈操作。的序列,简称拓扑序列。

2024-01-23 09:32:21 865

原创 二维扫描线法

/vec_y存储范围内的点的y值。

2024-01-22 18:46:09 398

原创 时间复杂度

对一个数据结构进行一组连续操作中,大部分情况下时间复杂度都很低,只有个别情况下时间复杂度比较高,而且这些操作之间存在前后连贯的时序关系,这个时候,我们就可以将这一组操作放在一块儿分析,看是否能将较高时间复杂度那次操作的耗时,平摊到其他那些时间复杂度比较低的操作上。O(n)--程序运行时间与问题规模呈线性关系。而且,在能够应用均摊时间复杂度分析的场合,O(1)--程序运行时间与问题规模没有关系。---系数归一,常数归一,保留最高次项。1s ---> 计算机计算10^8次。O(n^2)--循环套循环。

2024-01-22 18:45:00 369

原创 回溯算法详解

回溯算法 == 问题状态求解树 + 深搜 + 剪枝优化。

2024-01-22 18:43:47 821

原创 为什么在main函数外开数组

在main函数外开,使用系统堆空间,因为堆空间比栈(函数在栈内)大,所以在main函数外开数组时,可以开的更大。

2024-01-22 18:39:32 357

原创 排序算法详解

O(n^2)代码实现:void select_sort(int* arr, int l, int r) { for (int i = 0, I = r - 1; i < I; i++) { int ind = i; for (int j = i + 1; j < r; j++) { if (arr[j] < arr[ind]) ind = j; } swap(arr

2024-01-22 18:38:26 901

原创 判断可不可以左旋得到字符串

判断可不可以左旋得到字符串。

2024-01-22 18:29:11 368

原创 判断素数 -- 随笔

另一方面,当从小到大遍历到数 x 时,倘若它是合数,则它一定是某个小于 x 的质数 y 的整数倍,故根据此方法的步骤,我们在遍历到 y 时,就一定会在此时将 x 标记为 isPrime[x]=0。当然这里还可以继续优化,对于一个质数 x,如果按上文说的我们从 2x 开始标记其实是冗余的,应该直接从 x * x 开始标记,因为 2x,3x,…从小到大遍历每个数,如果这个数为质数,则将其所有的倍数都标记为合数(除了该质数本身),即 0,这样在运行结束的时候我们即。大于 x 的 x 的倍数 2x,3x,…

2024-01-22 18:27:45 397

原创 前缀和数组--HZOJ_244_第七章

求数组的连续M位和:O(n)---> O(1)问题转换(竞赛算法思维)

2024-01-22 18:25:33 332

原创 三部翻转法

include<stdio.h>#include<string.h>#include<assert.h>intcharacharbassertaassertbintaintbifreturnaacharabifreturnelsereturnintchar"abcdefg"char"cdefgab"intif"yes\n"else"no\n"return。

2024-01-22 18:24:20 333

原创 森林与并查集

1.N个节点有M对关系(M条边),每对关系(每条边)都有一个权值w,可以表示距离或划分成多个集合时的集合编号.

2024-01-22 18:22:36 901

原创 四平方和定理 - - leetcode 279

/ 判断是否能表示为 4^k*(8m+7)// 判断是否为完全平方数。

2024-01-22 18:17:04 343

原创 贪心--随笔

贪心:用偏序关系一次又一次的证明贪心策略。看一步走一步,而且只看一步路;算法执行每一步,都选当前最优解;HZOJ-P511 进制。不回头,不改变已有策略。

2024-01-22 18:14:51 347

原创 异或运算满足交换律

除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。异或运算满足交换律,a^b^a=a^a^b=b。

2024-01-22 18:12:13 358

原创 正方形矩阵顺时针旋转90度

matrix[col][n - row - 1]正好是旋转后的位置。正方形矩阵顺时针旋转90度 等价于 矩阵水平翻转 + 对角线翻转。n 是 matrix.size();

2024-01-22 18:10:23 397

原创 stack

堆栈是一个线性表,插入和删除只在表的一端进行。这一端称为栈顶(Stack Top),另一端则为栈底(Stack Bottom)。堆栈的元素插入称为入栈,元素的删除称为出栈。由于元素的入栈和出栈总在栈顶进行,因此,堆栈是一个后进先出(Last In First Out)表,即 LIFO 表。C++ STL 的堆栈泛化是直接通过现有的序列容器来实现的,默认使用双端队列deque的数据结构,当然,可以采用其他线性结构(vector 或 list等),

2024-01-22 12:09:21 323

原创 递归函数详解

假设递归函数调用返回结果是正确的,实现本层函数逻辑(p(n - 1)->p(n))实现边界条件时的程序逻辑(P(1))递归函数设计的三个重要部分。

2024-01-22 12:08:25 667

原创 队和优先队列

左孩子编号:2i右孩子编号:2i1。

2024-01-22 12:07:19 829

原创 队列和栈详解

size:队列大小head:头指针tail:尾指针。

2024-01-22 12:04:04 1162

原创 非递减排列

非递减排列是指一个数列中的元素从左到右依次不减,或者说不降序排列。也就是说,如果数列中某个元素的值比它前面的元素小,那么它的值至少和前面的元素相等,即数列中不存在逆序对。如果数列中有相邻的元素相等,也认为是非递减排列。9,8,7,7,6,5,5,2,1 : 非递增排列。1,2,3,3,4,5,8,8:非递减排列,1,2,3,4,5:递增排列,9,8,7,6,5:递减排列。

2024-01-22 11:52:04 686

原创 哈希表详解

介绍哈希表(Hash table,也叫散列表), 是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。哈希表hash table(key,value) 的做法其实很简单,就是把Key通过一个固定的算法函数既所谓的哈希函数转换成一个整型数字,然后就将该数字对数组长度进行取余取余结果就当作数组的下标,将value存储在以该数字为下标的数组空间里。

2024-01-22 11:48:44 942

原创 链表---详解

链表不一定由结构体构成,也可能是数与数之间的固定指向。双指针等距移动法:确定链表中的倒数第几位的位置。通过快慢指针可以分辨是单向链表还是循环链表。一般来说,有头链表使用时更方便。把链表的尾节点当作虚拟头节点。

2024-01-20 12:08:46 856

原创 平衡树基础

(1)节点插入从根节点开始,逐层比较要插入的节点比当前节点大,指针往右子树移要插入的节点比当前节点小,指针往左子树移直到遍历到空节点,根据上述规则,插入到空节点(2)节点删除1、删除叶⼦节点直接删除2、删除出度为1的节点提升唯一的子树3、删除出度为2的节点找到要删除节点的前驱或者后继,与其中之一替换后,转换为度为1的节点问题前驱:从要删除的节点的左子树开始,向右遍历到的最大节点为要删除的节点的前驱后继:从要删除的节点的右子树开始,向左遍历到的最小节点为要删除的节点的后继。

2024-01-20 12:03:49 873

原创 树与二叉树

根节点:最顶层的节点就是根结点,它是整棵树的源头叶子节点:在树下端的节点,就是其子节点个数为0的节点节点的度:指定节点有几个分叉就说这个节点的度是几(叶子节点的度为零)树的度:只看根结点,树的度等价于根节点的度出度:该节点指向多少个节点入度:多少个节点指向该节点节点高度:指从这个节点到叶子节点的距离(一共经历了几个节点)节点深度:指从这个节点到根节点的距离(一共经历了几个节点)树的高度:指所有节点高度的最大值树的深度:指所有节点深度的最大值。

2024-01-20 10:40:14 977

原创 顺序表详解

代码实现:

2024-01-20 10:35:53 867

原创 算法debug

算法debug。

2024-01-20 10:34:31 394

原创 编译——初识

二进制文件--包含在 ASCII及扩展 ASCII 字符中编写的数据或程序指令的文件。库文件是计算机上的一类文件,提供给使用者一些开箱即用的变量、函数或类。7.也可以由 hello.i 或 hello.s 生成目标文件 hello.o。5.也可以由 hello.i 文件生成 hello.s 汇编文件。6.只执行预处理、编译和汇编,输出 hello.o 目标文件。4.只执行预处理和编译,输出 hello.s 汇编文件。1.编译 hello.c,默认输出 a.out。Object file--目标文件--

2024-01-20 10:33:47 311

原创 C语言入门

"how do you do.","CHINA","a","$123.45"“C language programming”、“a\n”、“#1“、 “”修饰全局变量时,全局变量/外部函数的作用域变小/链接属性由外部属性变成内部属性,全局变量/外部函数只能在所在的源文件中使用。(4)单撇号只是界限符,不属于字符常量中旳一部分,字符常量只能是一个字符,不包括单撇号。十六进制-0,1,2,3,4,5,6,7,8,9,0 ,A,B,C,D,E,F,--0x。//此时num为常变量,不可变,但本质是变量。

2024-01-20 10:33:11 816

原创 跳跃表的代码实现

跳跃表(Skip List):增加了向前指针的链表叫做指针。跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质是一种可以进行二分查找的有序链表。跳表在原有的有序链表上增加了多级索引,通过索引来实现快速查询。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。跳表是一个随机化的数据结构,可以被看做是二叉树的一个变种,它在性能上和红黑树、AVL树不相上下。

2024-01-20 10:31:38 842

原创 Debug Release

Debug--调试版本--有调试信息,可以调试Release--发行版本--没有调试信息,不能调试,内存占用小F9--设置断点F5--启动调试,程序执行到断点处停止--有多个逻辑断点时,继续按F5,程序就会执行到下一逻辑断点上int main()int i = 0;for (i = 0;i<99;i++)//断点设置处,按F5会跳的逻辑断点上,所以每按一次F5就会打印一次ireturn 0;F10--逐过程调试,不进入函数F11--逐语句调试,进入函数shift+F5--停止调试。

2023-07-15 12:21:23 98

原创 enum

enumweek{Mon =1printf(运行结果:对上面的代码稍加修改enumweek{Mon =110printf(运行结果:示例三:(对枚举变量进行赋值)enumweek{Mon =1num= (enumweek)10;printf(%d, num);

2023-07-15 12:20:13 86

原创 inline

内部任何调用dbtest(i)的地方都换成了(i%2>0)?”奇”:”偶”

2023-07-15 12:18:15 91

原创 printf的返回值

printf的返回值是打印的长度。printf的返回值。

2023-07-15 12:17:34 73

原创 scanf,EOF,getchar,gets,puts

3.gets会将标准输入流(stdin)中的字符串存入str中,并自动加入'\0'EOF为End Of File的缩写,在操作系统中表示资料源无更多的资料可读取。scanf和getchar都是输入函数,它们都是从键盘上来读取我们的数据,但它们。puts()函数的作用与语printf("%s\n", s)相同。(1). puts()函数只能输出字符串, 不能输出数值或进行格式变换。1. gets()函数用来从标准输入设备(键盘)读取字符串直到。(2). 可以将字符串直接写入puts()函数中。

2023-07-15 12:16:02 68

原创 time库函数(转载)

然后调用localtime将time_t所表示的CUT时间转换为本地时间(我们是+8区,比CUT多8个小时)并转成struct tm类型,该类型的各数据成员分别表示年月日时分秒。日历时间,是用“从一个标准时间点到此时的时间经过的秒数”来表示的时间。这个标准时间点对不同的编译器来说会有所不同,但对一个编译系统来说,这个标准时间点是不变的,该编译系统中的时间对应的日历时间都通过该标准时间点来衡量,所以可以说日历时间是“相对时间”,但是无论你在哪一个时区,在同一时刻对同一个标准时间点来说,日历时间都是一样的。

2023-07-15 12:04:50 59

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除