
刷题笔记
文章平均质量分 74
分享做题思路
~yY…s<#>
积土成山,积水成渊
展开
-
【刷题27】动态规划—斐波那契数列模型
状态转移方程:dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);初始化:i从2开始,因为要保证i-1和i-2不越界。dp[0]和dp[1]初始化为0,cost数组才是表示每条台阶有费用的。因为是每次向上爬一个或两个台阶,所以可以理解为本次花费为前一个台阶的花费与前两个花费的较小值。注意:楼顶——状态表示数组的最后一个位置不是cost数组的最后一个位置,要多加一个。返回值是楼顶位置,此时就是花费最小。原创 2025-01-19 22:59:53 · 410 阅读 · 0 评论 -
【刷题26】贪心—柠檬水找0、将数组和减半的最少操作次数、最大数
【代码】【刷题26】贪心—柠檬水找0、将数组和减半的最少操作次数、最大数。原创 2025-01-17 22:20:37 · 316 阅读 · 0 评论 -
【刷题25】深搜——递归专题
注意:newhead其实指向的是val为2的节点2,图的意思是表示newhead在val为1的节点这层。注意:为啥是push_back。原创 2025-01-13 22:33:43 · 377 阅读 · 0 评论 -
【刷题24】BFS解决拓扑排序
有方向,没有环的图结构入度与出度针对一个顶点来说的入度:有多少的箭头指向该顶点出度:该顶点有多少箭头指向其他顶点。原创 2024-12-24 21:24:58 · 318 阅读 · 0 评论 -
【刷题23】多源BFS
【代码】【刷题23】多源BFS。原创 2024-12-22 16:35:20 · 414 阅读 · 0 评论 -
【刷题22】BFS解决最短路问题
思路:BFS+哈希表 找最短路径。如图:从A到I,怎样走路径最短。思路:BFS+哈希表。思路:BFS+哈希表。思路:BFS+哈希表。原创 2024-12-12 20:09:17 · 1186 阅读 · 3 评论 -
【刷题21】BFS解决FloodFill算法专题
【代码】【刷题21】BFS解决FloodFill算法专题。原创 2024-11-23 21:36:17 · 457 阅读 · 0 评论 -
【刷题20】优先级队列(堆)专题
题目:建大堆如果堆不为空,取堆顶最大的两个元素,相减取绝对值再入堆如果堆里面只有一个元素,直接返回这个元素堆为空,循环结束,返回0public:// 默认是大堆while(!qp.pop();qp.pop();qp.push(k);return 0;原创 2024-11-18 12:43:56 · 370 阅读 · 0 评论 -
【刷题19】队列+bfs专题
思路:队列+bfs – 与上题大体相同(当前节点的孩子节点入队列不同)思路:队列+bfs(具体看注释)思路:用数组模拟队列。原创 2024-11-14 16:10:20 · 415 阅读 · 0 评论 -
【刷题18】栈专题
【代码】【刷题18】栈专题。原创 2024-11-12 12:35:55 · 572 阅读 · 0 评论 -
【刷题16】有效的括号、用栈实现队列、用队列实现栈
思路:两个栈实现队列。思路:一个队列实现栈。原创 2024-11-07 09:32:37 · 297 阅读 · 0 评论 -
【刷题17】最小栈、栈的压入弹出、逆波兰表达式
【代码】【刷题17】最小栈、栈的压入弹出、逆波兰表达式。原创 2024-11-08 12:26:05 · 462 阅读 · 0 评论 -
【刷题15】字符串专题
相同就+=2,不相同就跳出循环。返回两个函数,得到返回值的较大值。思路:模拟二进制相加的过程(注意考虑进位)原创 2024-11-04 15:42:15 · 1099 阅读 · 7 评论 -
【刷题14】哈希表专题
j = 0 会不会与找到的元素位置下标刚好为0(第一个元素)冲突?因为能到这步的前提肯定是中间的某个元素与第一个元素相加等于target;既然如此,那么遍历到这个中间某个元素是不是之间就已经遍历过第一个元素了,既然刚开始就是第一个元素,那么为什么不这时候找k值呢?k值不就是这个中间的某个元素吗,然后j肯定不是0,并且i不等于j,直接返回就结束了。哈希表统计每个元素出现的个数,大于等于2就返回true,如果没有返回false。哈希表<字符串,字符串数组>思路:哈希表<元素,下标>哈希表<元素,下标>原创 2024-11-03 19:31:26 · 424 阅读 · 0 评论 -
【刷题13】链表专题
小堆,所有的链表的节点放入小堆,然后取顶部依次尾插(注意:要考虑链表的某个节点可能为空的情况)原创 2024-11-02 15:18:03 · 1217 阅读 · 8 评论 -
【刷题12】分治—归并排序
假如内循环是正常走完的,不是break跳出来的,那么根据前面说的,begin1>end1结束,所以内循环结束的下面理所应当要有一个break。但是假如是因为内循环的break到这里来的(ret+=后,begin1还是小于end1的),即内循环还没结束,外循环也没有,就直接跳出了,会出现各种问题。以上图为例:原数组的元素5是下标0,那么它的右侧小于它的元素个数,应该加在hash下标为0的位置上。思路:在逆序对的基础上改变应该条件:计算的是前面的元素比后面的元素的2倍大的个数。计算翻转对与合并分开写。原创 2024-10-21 19:42:55 · 996 阅读 · 5 评论 -
【刷题11】分治—快速排序
思路:建立一个小堆,先放k个元素,然后遍历剩余的元素,只要比堆顶大就进堆,往下沉。最后的堆顶就是第k大的元素。思路:快速排序—与前面相同,最后返回前cnt个元素。思路:快速排序(三路划分)原创 2024-10-18 14:48:08 · 444 阅读 · 0 评论 -
【刷题10】模拟专题
细节:如果numRows为1,说明只有一行,直接返回原来的字符串。原创 2024-10-15 21:41:17 · 305 阅读 · 0 评论 -
【刷题9】位运算专题
题目:使用STL的排序算法进行排序,只要是重复的字符必定是挨在一起的,所以可以遍历数组,有出现连续相同的字符就是有重复的代码:解法二:数组定义一个数组,大小26初始化为0,字符串的字符相对映射填入数组中,每个位置表示出现的次数,大于1次就说明有重复代码:解法三:位运算如果字符串的长度超过26个,必定有重复的,直接返回false定义的一个整型变量bitmap,它的比特位就是位图。如果位图的某一位已经存在,就返回false,否则填入位图中。遍历整个字符串后返回true代码:三、丢失的数字题原创 2024-10-12 18:34:12 · 849 阅读 · 0 评论 -
【刷题8】连续数组、矩阵区域和
思路:前缀和+哈希表。原创 2024-10-10 14:35:58 · 536 阅读 · 0 评论 -
【刷题7】寻找数组的中心下标、和为k的子数组、和可被k整除的子数组
除自身以外数组的乘积>根据本题变形。思路:前缀和+哈希表。思路:前缀和+哈希表。原创 2024-10-09 21:00:07 · 349 阅读 · 0 评论 -
【刷题6】一维前缀和、二维前缀和
四、多开一个好放数据,同时满足l、r下标刚好对应上。一、前缀和,时间复杂度O(1),快速得到区间的值。三、使用前缀和,根据题目计算出区间。二、预处理,公式——一、预处理前缀和矩阵。原创 2024-09-30 23:47:04 · 360 阅读 · 0 评论 -
【刷题5】在排序数组中查找元素的第一个和最后一个位置
细节2:如果找完左端没有left=nums[mid],也是直接返回-1-1。,一旦相等就会死循环。或者说left=right就终止了。细节1:如果数组没有元素,直接返回-1-1;返回begin和end,是。取中点问题:取第二种。原创 2024-09-27 21:14:08 · 378 阅读 · 0 评论 -
【刷题4】最小覆盖子串
返回值:定义返回值ret,在判断里面截取字符串tmp,这里需要一个临时的字符串str,每次截取后赋值给str,然后如果ret为空,str直接给ret;ret不为空,比较ret和str的长度,只有str的长度小于ret的长度,才把str赋值给ret。定义变量count,统计有效字符的个数,用法与上一篇博客的两题一样,先进窗口,再判断count++;先判断count–,再出窗口。计算两个字符串的长度,定义两个哈希表,用其中一个哈希表先统计字符串t的字符出现个数。判断条件:count == 字符串t的长度。原创 2024-09-26 20:49:24 · 362 阅读 · 0 评论 -
【刷题3】找到字符串中所有字母异位词、串联所有单词的子串
哈希表2统计字符串p的每个字符出现的个数,然后遍历字符串s,先进窗口,相同的映射位置,哈希表1该位置的个数<=哈希表2的个数,count++(比目标数小才要++,超过了就不需要++,有等号是因为先进窗口)。如果超过固定长度,先判断哈希表的位置,哈希表1该位置的个数<=哈希表2的个数,count- -(比目标数大去掉也无效,小于了有效数就减少,等于是因为先判断的,后面要哈希表位置要减减),然后出窗口。循环次数:是单词的个数(每个单词的个数是相同的)固定窗口大小:words的长度 * 单词长度。原创 2024-09-25 21:18:24 · 335 阅读 · 0 评论 -
【刷题2—滑动窗口】最大连续1的个数lll、将x减到0的最小操作数
要让操作数的次数最小,就要让等于target的子数组尽可能大,然后用滑动窗口的思路做,返回值为:如果子数组中没有和等于target就返回-1,否则返回数组长度减去len(n-len),得到最小操作数。最右边和最左边的和为x,用一个变量sum统计数组所有的元素之和,sum-x就是剩下区域的元素,这个区域是连续的,可以用滑动窗口。要考虑target是负数的情况,如果是负数,直接返回-1,因为数组的每个元素都是整数。问题转换为:找到一个最长子数组,这个数组里面0的个数不能超过k个。原创 2024-09-23 21:22:50 · 471 阅读 · 0 评论 -
【刷题—双指针】复写0、三数之和、四数之和
定义两个变量cur等于0,dest等于-1,让cur去遍历数组。如果cur指向的元素是0,dest往后两步,非0,往后一步。判断dest的位置,如果大于等于n-1,就停止操作,否则cur++原创 2024-09-21 21:37:50 · 394 阅读 · 0 评论 -
【C语言练习】数组OJ题
创建两个变量src和dest,让src去遍历数组(src的范围小于元素个数),如果数组中的元素与val相等,就跳过;当某个数组的全部放完了,直接把另一个数组依次往前插入就行(如果是num1还有元素没放完就不需要,因为num1就是它自己,num2有多余的元素需要有这个条件),然后定义一个遍历去遍历数组,只要是重复的数字就跳过,不重复就存放到数组中,每次存放有一个变量(k)加1,(数组是从0加到N,所以把0到N的数加起来减去数组中的值,结果就是消失的数字。时间复杂度为O(N)得到的就是右轮转k个的数组。原创 2023-08-20 16:15:56 · 495 阅读 · 12 评论 -
【数据结构练习】单链表OJ题(二)
比如原节点13的random指针指向原节点的7,那么拷贝节点13的random指针则指向拷贝节点的7。用一个变量cur遍历链表,只要不为空每次进入循环先定义一个变量next记录原链表的下一个位置(cur在原链表的下一个位置,方便一次拷贝完找到),然后开辟一块空间copy为拷贝节点,把原节点的值赋给拷贝节点,再让cur的下一个地址为copy,copy连接next。它们的长度不一定一样长,所以要先计算出链表A和链表B的长度,让较长的链表先走长度差的距离,然后再同时走,直到两个链表相交,返回那个开始相交的节点。原创 2023-08-25 16:12:05 · 854 阅读 · 21 评论 -
【数据结构练习】单链表OJ题(一)
用一个变量cur遍历链表,要删除的节点是头节点,就是。原创 2023-08-21 15:57:06 · 478 阅读 · 10 评论 -
练习——杨氏矩阵、字符串左旋
前段时间学习了杨氏矩阵、字符串左旋,给大家分享下这两个用代码是如何实现的(文字+画图分析)原创 2023-07-12 22:49:36 · 177 阅读 · 1 评论 -
【C语言练习】——找出单身狗、详解atoi函数
atoi函数的作用是将字符串转换成整数该函数有以下几点要注意1.返回值为int 类型的整数,不能超出int 表示的范围2.该函数首先根据需要丢弃尽可能多的空格字符(如 isspace) ,直到找到第一个非空格字符。然后,从这个字符开始,取一个可选的初始正负号,后跟尽可能多的十进制数字,并返回一个数值3.字符串可以在构成整数的字符之后包含其他字符,这些字符将被忽略。原创 2023-08-13 11:05:18 · 462 阅读 · 22 评论