- 博客(9)
- 收藏
- 关注
原创 算法基础:枚举+模拟+递归与分治
在枚举第一数的适合第二个数就已经呈现出一些规律了,那么就是第二个数必须是第一个数的相反数,既然如此就可以使用桶的思想记录,当桶中有这个数数出现第二次时就说明成立,相反数处理采用一个是+一个是 -.递归和分治,模拟,枚举这些思想是算法长河中比较基础的东西,学习理解使用他们,可以让我们在以后的算法道路上走得更远,最后,路漫漫其修远兮!定义:分而治之,把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。递归的优化有两个:搜索优化和记忆化搜索;
2025-03-16 18:15:22
1258
原创 输入输出技巧,算法入门技巧,适合新手
stdin和stdout文件流,按行读取输入输出效果更快,虽然按行读取的优化要快一些,不过,关于相关函数执行和后期析构调用对于对这两个函数不熟悉的友友来说,有点过于复杂,所以建议使用前两种优化方法就够了,最后这个当板子,了解了解即可。putchar的使用采用一样的思路,不过putchar的1byte输出是反向输出,所以设计先进后出的思路,我们可以采用递归设计和堆栈使用设计。
2025-03-16 16:46:14
282
原创 Leetcode221.最大正方形,前缀和知识点学习解析,易上手
结论:前缀和矩阵数组可以快速的让我们获取每个子矩阵的大小,例如获取 (i1,j1)到(i2,j2)的矩阵块大小就可以使用(Snum为前缀和数组)Snum(i2,j2)-Snum(i2,j1)-Snum(i1,j2)+Snum(i1,j1)得到;前缀和数组的存储可以使用表达式Snum(i,j)=A(i,j)+Snum(i-1,j)+Snum(i,j-1)-Snum(i-1,j-1);项的和」,是一种重要的预处理方式,能大大降低查询的时间复杂度。其中A是原先存储是数据的数组,Snum是前缀和数组;
2025-03-10 20:03:59
427
原创 LeetCode.7.整数反转,易懂
2、思路分析:设计到反转的问题,有两种实现方式,第一种是字符串的反转,也是最长接触到的反转方式,第二种,对于数的反转可以通过%10运算,依次取最小的个数,在对其*10运算转移带前位实现反转,本题小编使用的是第二种方法,当然第一种方法的实现代码也已给出;针对于反转问题,可以采用多种方式,例如小编上述实现的方式,不过小编更加推荐是使用字符串反转的方式,因为这种方式适用范围更加广泛;1、目标:根据题目信息可以获取到最终的目的是返回一个反转的数,且这个数是只能在32位存储下的,超过后返回为零;
2025-03-10 15:40:06
320
原创 LeetCode.6 Z字形变换解析
根据题干信息找规律,发现,通过传入API的第二个数据可以确定抽象矩阵行数,其次这个矩阵元素呈Z字型传递,也就是传递时,设计到的操作是当前位置-1,则可以设置一个记录变量flag1表示传递,初值为-1,随后在同列元素间的存储传递采用+1操作,同样可以设置一个记录变量flag2,由于flag1和flag2的变换时机并不冲突,所以可以使用一个变量表示,flag;根据题目信息分析得到,s串的输入是是从上到下,从左到右的Z字形字符串,为了方做题解答,我们需要对s串抽象出的矩阵,进行表示;
2025-03-10 15:00:13
330
原创 树转图存储,leetcode655输出二叉树,解析,适合新手
总结:整体实现并不复杂,需要玩家对树的基本概念有清晰的理解和对题目信息的准确理解,有坑的地方无非是对于高度的定义是从0开始还是从1开始,如果有什么理解错误的地方请指出,小编会及时进行更改,如果对你有帮助,就留下个赞和帮助吧,小编会继续发表有趣的解法,并不断更进写作水平。随后需要编写遍历的算法,这里采用的是DFS深度优先搜索和先序遍历方法实现(别的实现方式可以自行选择,如广度优先,后序遍历之类)明确参数列表,我们需要获取需要遍历的树,存储的具体数组,坐标,以及存储子节点的偏移量。二叉树知识点最详细最全讲解。
2025-03-09 19:40:48
1277
原创 leetcode470题,非常易理解,适合初学者
第二种:首先确定我们应该如何获取1--10的随机数,常规有效的方法是mod10+1运算,将>=10的数进行mod10运算即可产生1-10之中的数,其次考虑概率问题,应当如何让生成的数中mod10+1后产生的各个数概率十分接近,答案是让生成的各个个数位为0-9的数的数量十分接近即可,则可以调用rand7函数n次(n>=6)实现;第一种:线性的去依次生成从1到无穷的数,对其取mod10运算,是一种快速实现伪随机的方法,虽然个人认为这个方法不是很符合题意,也不太符合随机,但是针对于此题确实是最快的解决方案;
2025-03-07 16:55:41
450
原创 leetcode第四题解析理解,易上手
保证两个割痕左边元素之和为合并数组中位数左边元素之和,例如当第一个数组割痕移到4,7中间,第二个数组就要相应的向左移动对应的一段距离,算法基于二分设计;我们将定义一个切割的概念,一个长度为y(偶数)的数组,从中间切一刀,割痕两边的数的和的均值就是中位数,如果y是奇数,切到的数就是中位数;假设数组a中有m个元素,其中位数为m/2(如果m是奇数,m/2+1),数组b同理,所以割痕就在中位数上或中位数中间;第一个数组割痕在3,4之间,第二个数组割痕在5上,合并数组的中位数下标是 5,实际位置是6;
2025-03-06 17:54:02
445
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人