自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 树的基础函数写法

【代码】树的基础函数写法。

2026-03-28 11:15:12 23

原创 最长不重复字符串(桶的使用)

桶的使用:后面了解到可以用桶的思想,用bucket[128]数组储存每个字符的最后出现次序(这个次序用下标表示),正好一共128个字符,每个字符对应着每个数字,定义最初时间left,当前时间right,如果bucket[s[right]](当前下标对应的前一个出现次序)>=left(最早时间),那么right下标对应的字符就已经出现过一次了,此时就计算长度(right-left+1),每次比较获得最大值,left=bucket[s[right]]+1;第二次:b来了,right=1,时间为1;

2026-03-14 13:11:45 201

原创 单调队列(解决滑动窗口最值问题)

的期望为(1+0+2+1)/4=1.00(1+0+2+1)/4=1.00。对于 100%100% 的数据,保证 n≤10^5,个由空格隔开的正整数 a1,a2,...,an。熊二框出 [1,2][1,2],Q=1。熊二框出 [2,3][2,3],Q=2。熊二框出 [1,2][1,2],Q=1。熊二框出 [2,3][2,3],Q=2。熊大框出 [1,2][1,2],P=2。熊大框出 [1,2][1,2],P=2。熊大框出 [2,3][2,3],P=3。熊大框出 [2,3][2,3],P=3。

2026-02-07 13:42:31 287

原创 C语言的滑动窗口,队列

小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果内存中有,软件就会用它进行翻译;如果内存中没有软件就会在外存中的词典内查找,查出单词的中文含义然后翻译,并将这个单词和译义放入内存,以备后续的查找和翻译。假设内存中有 MM 个单元,每单元能存放一个单词和译义。

2026-02-03 09:50:25 58

原创 单调栈(每日温度,求柱状统计图最大矩形面积等问题)

3.进行比较,当前元素和栈口元素的大小,如果mid<=right,那么当前元素进栈,如果mid>right,则计算高度和。宽度(if(top==-1),wid=i,else,wid=i-s->data[--(s->top)]-1)2.全过程的进栈和出栈仅凭top的移动来完成即可,因为我写的是数组形式。1.将栈的准备工作做好:top=-1,时间发杂度为O(n^2).栈是用来存储元素下标的。时间复杂度为O(n).

2026-01-23 15:02:32 297

原创 单链表和循环链表

4.开辟内存空间:具体怎么实现以上插入数据操作,这就要靠开辟内存空间来实现了,每插入一个数据,都要开辟一个内存空间(结点)来存放数据,再将它用头插法或尾接法插入链表。(构建一个结构体,里面包含data用于储存每个节点的数据,还要包含一个用于指向下一个结点的指针*next)//Node是typedef给结构体起的别名,用于让编译器识别,Node是结构体类型。3.尾接法,将待插入的数据往末尾插入这两种方法都是用来插入数据,顺序不一样。2.头插法,将后面的每个数据从头结点后面插入。

2026-01-21 16:06:46 237

原创 栈(数组方式和内存分配方式)

栈:后进先出,只对尾巴进行增删操作(子弹上膛原理)

2026-01-21 15:38:18 122

原创 导弹拦截系统(贪心加动态规划)

至少需要系统数量:只需找出最长单调递增的链即可,链条的长度即为系统数量,也是运用brr动态规划。最长导弹链:运用arr动态规划寻找最长的那条单调递减的链。

2026-01-16 14:38:36 124

原创 删除字符,使得剩余字符字典序最小(贪心加单调栈思想)

贪心思想:为了使结果最小,需要让高位(左边)的数字符尽可能小,所以从左依次遍历数组,只要发现当前字符比左边字符小,就把那个大的字符删掉(赋值替换)手段:brr模拟了栈,遍历arr中每个字符,将其压入brr栈,如果当前字符arr[i]比brr[len-1]要小,就删除,直到t=0无法删除。我一开始的思路是按照经典的贪心算法,找零钱那样,先将字符串排序放入另一个数组,然后按照顺序依次对比找出。后面看见又简洁又快速的方法:(单调栈和贪心)t:删除额度,表示还剩t次删除机会。时间复杂度是O(m)

2026-01-16 14:13:31 227

原创 统计字符串中子字符串的个数

2026-01-15 10:06:04 91

原创 密码发生器(多位数转个位数,去除残留的\n,fgets用法)

NULL)

2026-01-10 15:01:30 204

原创 浮点型的二分查找(切绳子)

1.一开始想着二分查找的边界值设为0-数组L里最小长度的绳子向下取整,一开始以为每根绳子都得切,所以右边界以为是数组L里最短的绳子,后面发现绳子太短可以不取,那么右边界值就为最长的绳子。2.还有个要注意的就是,这不是普通的整数二分查找,是精度二分查找,如果不限制次数,就会无限查找下去,因为二分查找的中间值mid可以一直中分下去。3.这里最后保留整数部分,以保留两位小数部分输出时,用到了floor函数,包含在头文件#include<math.h>里面,意为向下取整。直接舍掉两位后的小数。

2026-01-08 19:36:45 218

原创 快排加二分查找

不知道你要排的是整数、小数还是字符串,所以它把所有东西都当成“一坨内存”传进来。这个题的核心在于(运用快排和二分查找降低时间复杂度)会反复调用这个函数来问:“这两个数,谁大谁小?这个指针,当成“整数指针”来读,然后取它的值。表示这个函数承诺不会修改你原本的数据。你需要把“一坨内存”(认为它们一样大,顺序无所谓。这是一个函数,名字叫。回你原本的数据类型(

2026-01-08 11:26:29 140

原创 记录间隔10分钟的当前时间

首先将小时转为分钟便于计算,然后分别定义间隔时间interval10分钟,序号index,过去分钟pass,利用循环,循环的条件是pass的时长小于自定义总时长total_minute,然后再处理一天制,最后再将总分钟转为小时制和分钟制,逐个输出。'0'表示小于10的话在前面补0;

2026-01-06 09:16:27 197

原创 按顺序统计字母个数(排序,去杂,统计,去杂)

在电商行业竞争日益激烈的当下,了解用户对于产品的真实反馈至关重要。你作为一家电商公司市场部门的工作人员,公司已经收集了海量用户对于某款产品的评价内容,这些评价内容以文本数据的形式存在,包含了各种各样丰富的信息。

2026-01-05 14:29:37 396

原创 进制转换(迭代累加和函数)

(2):函数pow。

2026-01-04 22:31:28 133

原创 斐波那契数列(记忆法优化和直接for循环)

之前就听学长说过要用记忆优化斐波那契数列了,因为直接递归会重复计算大量相同的数据,时间复杂度为O(2^n),会超时,然后就听说过记忆优化,用数组将计算过的数据存储起来,这样就不会二次计算了,时间复杂度就降到O(n)了。还有一种时间复杂度也为O(n)的方法,就是直接进行for循环。

2025-12-27 21:13:35 178

原创 寄邮件(错位排数)

上面用的递归的方法,时间复杂度为O(n2),和斐波那契数列问题一样,会重复计算大量数。综上所述,可以发现D(n)=(n-1)*(D(n-1)+D(n-2))下面为普通求法,时间复杂度为O(n)代码为:(这题求的是n+1的值)

2025-12-22 15:38:50 210

原创 直接插入排序

思路:用i从第二个数开始定位,将这个数与前面的数进行比较,小于前面的数的话,就往前挪,知道挪到合适的位置,以此类推,这样就形成了已排序和未排序两个部分,前面的为已排序部分,后面的为未排序部分,每次将后面的未排序部分的数插入到前面已排序部分数中合适的位置。

2025-12-17 19:35:34 106

原创 用容斥原理来求能被几个数整除的个数(解决超时问题)

暴力求解,结果导致超时。

2025-12-17 18:12:10 186

原创 找某个数的质因子

首先分析什么是质因子:如果一个数的。,那么这个因数就叫做该数的。(约数)恰好也是一个。

2025-12-14 22:49:20 374

原创 蛇形矩阵(三角形版本)

一开始,发现了规律,但是不知道怎么表示,一开始觉得用多个for循环直接计算得出,后面想了一下,肯定会超时,而且复杂程度很高。于是问了问了同学之后,才有的用数组的想法,但是要考虑到要多组输入,所以每次输入签要将数组里的数清零,这就又要用到一个函数。

2025-12-14 18:58:52 199

原创 直接插入排序

思路:1.先利用while循环来进行多组输入 2.然后定义数组进行赋值 3.保存数组第二个元素,从第二个元素开始遍历数组,(其实是进行记录多少趟循环)4.从当前元素开始,逐次往前遍历,凡是比当前元素大的都往后挪,挪至当前位置,知道外层循环i进行k趟。

2025-12-11 11:08:59 104

原创 递归求两个数的最大公因数

之前只会会用双重for循环来求最大公因数,最近做pta才发现还可以用递归来求。

2025-12-08 14:40:05 215

原创 将数字反转过来

每次取m的最后一位,调用函数pow计算幂,定义一个计数器count=0,运用循环,计算位数,然后递归回溯的时候,将每个剩余数字的最后一位乘以10的count次方,累加,即使最后一位数字是0,最后把结果加起来的时候也不会影响。一开始的思路是倒着打印每个数字,定义一个判断余数的值,当余数等于0时不打印,然后递归判断其他数字,后面发现如果中间有0的话,例如1002,打印的结果是21,所以不行。错误代码:(函数部分)

2025-12-08 13:17:24 128

原创 调用两个函数,求阶乘之和

2025-12-04 21:51:26 119

原创 多组输入,打印冒泡排序后的数组

涉及三个知识点:1.自定义函数 2.冒泡排序 3.多组输入。

2025-12-04 21:46:02 129

原创 递归阶乘,斐波那契数列(普通方法和递归)

普通方法耗时没那么久,运行没那么复杂。函数自己调用自己,一定要有限制条件。递归会大量重复计算,耗时,运行复杂。

2025-12-02 16:52:44 199

原创 递归求阶乘,斐波那契数列(递归和普通用法)

函数调用自己递归方法:

2025-12-02 16:43:49 110

原创 优化求和公式

问了学长之后,才发现这个复杂度为O(n2)0 < n < 2e5,会超时,然后就给了这个求和公式,做了一个优化。

2025-11-30 23:45:40 214

原创 将一组数的最大值和最小值分别放入数组的第一位和最后一位

/在第二次循环之前把数给替换完,那么在第二次循环时,就直接找最大值,就不会出现上面的错误了。if(max==0)//就是这里,如果最大值在0号位的话,会导致把找到的最小值和最后一个本该放最大值的位置交换。这题其实不难,只不过很容易出错啊我觉得,找错找了好久。}这里我实在是找不出什么毛病。

2025-11-29 23:53:46 315

原创 对角线相加法(暴力求解)求n*n举行方阵对角线之和,杨辉三角

杨辉三角,n*n方阵对角线之和

2025-11-27 23:38:33 157

原创 近几天学习的冒泡法和选择法排序

选择法和冒泡法排序

2025-11-27 23:23:56 180 1

空空如也

空空如也

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

TA关注的人

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