- 博客(54)
- 收藏
- 关注
原创 力扣完全平方数279和力扣91解码方法的做题笔记
动态规划的状态定义dp[i]:表示前i个字符的解码方式数。例如,dp[1]表示前 1 个字符的解码方式数。dp[2]表示前 2 个字符的解码方式数。以此类推。
2025-03-02 21:33:00
1105
原创 dfs的刷题小总结。
定义全局变量minSteps:用于记录最少按键次数。visited:用于记录已经访问过的楼层。修改dfs函数增加steps参数来记录当前按键次数。在进入新楼层之前,检查是否已经访问过。在到达目标楼层B时,更新minSteps。在每次递归调用dfs时,增加steps的值。初始化在main函数中,初始化minSteps。初始化visited数组。调用dfs从初始楼层A开始调用dfs,初始steps为0。
2025-01-25 19:52:53
1029
原创 基础算法——差分
可以发现,我们先对diff数组==[L,R] + v = d[L]+v,d[R+1]-v==处理,然后进行前缀和处理还原,就是在[l,r]区间进行+v的操作,那么我们在遇到这样的问题时,直接先把原数组的差分数组弄出来:diff[i] = arr[i] - arr[i - 1],然后进行处理,处理次数依情况而定,最后再前缀和还原,这样时间复杂度就是O(m+n),线性,大大优化。
2025-01-11 16:52:31
730
原创 基础算法——前缀和
我们要算区间和,并且还要根据k的值来确定区间每个元素要进行k次方的处理,如果我们根据输入的k是多少然后再对区间元素进行处理。因为我们每次访问,虽然输入的l,r不同,但每次都要从头开始算次方和前缀和,这样多次的重复运算,就使得时间复杂度很高。的数量是相等的,按照题目中平衡串的定义,这个子串就是一个平衡串。数组的计算方式,在代码中通过如下语句来构建。的数量是否相等,也就是它们的差值是否为。表示的是从字符串的开头(也就是。的数量差值,其实就等于从开头到。的数量相等,是一个平衡串。例如,还是以上面的字符串。
2025-01-08 11:36:56
799
原创 进制转换——基础算法
将每一位乘以对应的十的次方数,再进行相加。第一步是把N进制数的每一位存入数组arr中。然后初始化十进制数x为0x 不断的乘以N,再加上N进制数的每一位数就可以得到十进制数字N了。
2025-01-05 16:03:54
348
原创 双指针的学习笔记
由于数字都是正数特性。当慢指针(左指针)移动的时候,区间和一定小,区间长也变小。当快指针(右指针)移动时,区间和变大,区间长变大。数组或者是字符串中,用来遍历。最美区间:输入两个数,n,s。找出大与等于s的最短区间。给出的样例都是升序的。
2024-12-31 10:18:19
418
原创 PTA数据结构编程题7-51,52,53
这道题目总体思路是先遍历两个链表,然后处理剩余数组的元素,最后再把处理结果放入第三个数组中输出即可。如何遍历两个数组?用双指针i,j把小的元素先放入数组中,如果不等长,则是短的链表先走完,此时,同时遍历两个数组这件事情结束。然后是处理剩余的元素,为什么剩余了?因为长链表还没有走完但是短链表走完了,所以还剩下一些长链表里面的元素没有被处理。长的链表此时双指针的下标一定还小于数组的大小。由于是非降序数组,则是挨个放入,恰好从小到大排列。
2024-12-27 21:47:14
440
原创 PTA数据结构编程题7-1最大子列和问题
给定K个整数组成的序列{ N1, N2, …, NK},“连续子列”被定义为{ Ni, Ni+1, …, Nj},其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测试各种不同的算法在各种数据情况下的表现。
2024-12-26 16:10:02
766
原创 链表刷题笔记(题解出自灵茶山)
即两个指针初始化为头节点,都从头节点出发。先让快的指针先走n次,如此就跳过了n个结点。但是判断条件要注意。一个乌龟一个兔子,永远不可能相遇,当它们相遇的时候,就说明这是一个环形链表。然后,慢指针与快指针再同时往后移动,此时就能发现,慢指针指向的位置就是倒数第n个结点的前一个结点。这里还没有结束,如果链表只有一个结点。那么我们需要创建一个哨兵结点,在前面,这样就可以解决了。难点在于怎么找到要反转的头节点的前面一个结点。就是将反转与寻找链表的中间结点结合起来。我写的时候错写此条件,会造成错误。
2024-12-10 19:29:19
241
原创 题目:苹果P1580的做题笔记
得到k的值后,将第一天到某一天的累积的苹果数存起来,直到这个数字>=k值。然后运用二分查找的思维去寻找匹配的下标。
2024-12-05 10:30:09
367
原创 PAT乙级1003我要通过的做题笔记
得到“答案正确”的条件是:字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a、 b、 c 均或者是空字符串,或者是仅由字母 A 组成的字符串。根据题目中的规则,如果aPbTc是正确的,那么aPbATca也是正确的。
2024-12-03 11:30:30
1039
原创 C语言模拟实现简单链表的复盘
我在实现时,错误讲指针先赋值为NULL,这样的话会造成野指针错误。不是将指针赋值给一个变量然后++,是将指针赋值为下一个节点的指针。sizeof(struct LNode)更加严谨。头节点与其他节点的处理方式不同。
2024-11-27 21:16:25
495
原创 数据结构单链表,顺序表,广义表,多重链表,堆栈的学习
比如一个多项式,主要包括x的系数,x的指数,那么可以创建一个一维数组来存储它的系数和指数,用数组下标来表示。它的系数可以用数组下标对应的数组元素来储存。可是这样储存会浪费空间所以采用单链表形式来存储。即创建一个指针变量,存储元素地址与下一个元素的地址,这样就不会造成太多空间的浪费。
2024-11-26 21:59:32
194
原创 文件的读写
FILE* stdin - 标准输入流(键盘)FILE* stdout - 标准输出流(屏幕)FILE* stderr - 标准错误流(屏幕)任何一个C程序,只要运行起来就会默认打开三个流。
2024-11-20 21:04:59
225
原创 相向双指针的两数之和,三数之和
returnSize是一个指向整数的指针。这个指针的作用是让函数告知调用者返回结果的大小。在这个函数中,函数将*returnSize设置为2,表示返回的结果数组(由twoSum函数返回的数组)的长度是2,其中包含了找到的两个数在numbers数组中的下标(从1开始)。p为一个储存两个整型的数组的首元素的指针。返回这个指针,就可以通过它找到我们存储在其中的两个下标。numberSize代表数组元素的个数用于确定双指针的取值范围。numbers指针代表数组首元素的地址,target代表我们要寻找的两数的和。
2024-11-19 14:42:53
388
原创 枚举,联合
define 定义的量在调试时和肉眼看到的代码不一样struct stint a;char c;//4char c;//共用int main()union Un u;u.c = 0x00;//?return 0;
2024-11-16 21:37:09
165
原创 qsort函数的模拟实现
int(* cmp)(const void* e1, const void* e2)//函数指针-比较函数。void qsort(void* base,//你要排序的数据的起始位置。size_t width,//待排序的数据元素的大小-单位是字节。size_t num,//待排序的数据元素的个数。
2024-11-16 19:34:27
175
原创 简单通讯录的实现
assert(pc);printf("无对象可查找\n");return;printf("请输入要查找对象的名字");//1.查找printf("你输入的用户不存在\n");return;//2.打印printf("%-5s\t%-5s\t%-20s\t%-20s\t%-10s\n", "姓名", "年龄", "性别", "电话", "地址");
2024-11-15 21:45:10
209
原创 memmove函数的模拟实现,memset函数
void* my_memmove(void*dest, const void* src, size_t num){ assert(dest&&src); void* ret = dest; if (dest < src) { //前->后 while (num--) { *(char*)dest = *(char*)src; dest = (char*)dest + 1; src = (char*)src + 1; } } else
2024-11-10 21:26:38
177
原创 strnlen,strncmp,strncat,strstr,strtok,memcpy函数的用法,strstr函数的模拟,memcpy函数的模拟
括号内第一个为目标地址,第二个为拷贝资源,第三个为拷贝个数括号内第一个为目标地址第二个为拷贝内容的地址,第三个为拷贝个数。注意是从目标字符串的\0开始,拷贝后结尾会自带\0模拟时要注意第二种情况,较复杂。sep里面放分割的符号,如果传参时第一个内容为NULL,那么从上次分割处开始memcpy函数对于自身的拷贝存在缺陷。
2024-11-09 21:44:39
199
原创 2024/11/06c语言笔试题练习
strlen是库函数,只针对字符串,是求字符串长度的,关注的是字符串的\0,计算的是\0之前出现的字符的个数sizeof是操作符只要想计算空间大小都可以用sizeof来算。只要想计算空间大小都可以用sizeof来算strlen函数所期望的const char*类型的指针针的下一个位置,不是指向字符串的指针,这是错误用法,strlen的结果是未定义的。对第二行地址解引用,就是对一维数组解引用,访问整个数组sizeof(
2024-11-06 21:52:59
234
原创 2024/11/4指针数组,数组指针,函数指针
/&数组名 - 取出的是数组的地址//数组指针//&函数名 - 取出的就是函数的地址?//确实是函数的地址//每个函数都有地址//那么函数名是不是代表函数的地址呢?//对于函数来说,&函数名,函数名都是函数的地址。//函数指针-指向函数//调用函数,通过函数指针return 0;
2024-11-04 22:01:23
188
原创 2024/10/31C语言
思路:可以将字符串放到char类型数组中,然后定义下标0为left,right为最后一个元素下标,可借助sizeof来计算。
2024-10-31 22:00:06
132
空空如也
纯软和嵌入式该怎么选择?
2024-10-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人