算法专题
文章平均质量分 96
我是哈哈hh
哈哈~哈哈
展开
-
专题二十_动态规划_简单多状态dp问题_买卖股票系列问题_算法专题详细总结
本题不是很难,主要就是要学会分析当前问题的情况,学会分类讨论,讨论出当前位置是选还是不选比较合适,从而分出两个函数来一个单独代表选的情况,一个单独代表不选2.打家劫舍II (medium)这是上一题的升级版,围成了一个圈,也就是说偷了0位置就不能偷n-1位置这一题值得好好反思总结跟上一题的区别,原理是一样的,但是细节问题很多好好对比一下还是收获满满的;3.删除并获得点数(medium)题目意思很简单,就是每次选择一个数后比这个数大一和小的全部不能选,求出最大总和。原创 2024-11-16 13:21:53 · 339 阅读 · 0 评论 -
专题十九_贪心策略(1)_算法专题详细总结
1.把解决问题的过程分为若干步;2.解决每一步的时候,都选择当前看起来 “最优的” 解法;3.“希望” 得到全局最优解贪心策略是当前步骤下的最优解,只要能证明当前策略是正确的,想清楚后,代码还是很好写的,就有点模拟的味道了2.将数组和减半的最少操作次数(medium)题目意思还是很简单的,就是每次挑选最大的数进行减半,然后当整个数组的和小于原先数的一半的时候,返回要操作的次数;只要能考虑出来贪心策略就可以上手写代码了,简直就是另一个版本的模拟,所以还是很考验代码能力的3.原创 2024-11-15 00:10:51 · 785 阅读 · 0 评论 -
专题十八_动态规划_斐波那契数列模型_路径问题_算法专题详细总结
这个时候,不但要多开一行,还要多开两列,将左右两列都设置成INT_MAX,因为本来这两列是不存在的,但是为了在遍历上一行的三个位置的时候会出现越界情况,所以,多开两列,设置成最大值,这样就不会出现越界和乱取值的情况,这样怎么取,都是在ma原数组里面的值;dp[0][1] 和 dp[1][0]里面最小的一个再加上grid[0][0],显然这是绝对不可以的,因为dp[1][1]这个位置就只是只应该有自己原本的那个数,所以dp[0][1] 和 dp[1][0]都应该初始化为0,其他位置都初始化为INT_MAX;原创 2024-11-12 21:02:32 · 1151 阅读 · 0 评论 -
专题十七_BFS_BFS解决 FloodFill 算法_BFS 解决最短路问题_多源 BFS_BFS 解决拓扑排序
数组来将基因库里面的所有字符串全部都存入并置为false,那么就进行将所有于当前只差一个字符的字符串全部都入队列,就是证明下一层的所有字符都被入了队列,然后再次进行判断,判断出与这个新的一层只差一个字符的字符串有哪些,就这样循环往复,直到入队列的某一刻,遇到了与end字符串相等的那一个字符串,那么就可以进行返回当前的层数,此时从开始到结束,都是用ret来记录进入队列进入了多少层。然后在进行回退到最初的入口,再两层for的条件下,寻找新的入口,那么能够找到几个入口,就证明有几个岛屿。原创 2024-11-02 20:47:47 · 645 阅读 · 0 评论 -
专题十六_栈_队列_优先级队列_算法专题详细总结
虽然第一个题目比较简单,但是是掌握的熟练一点比较好,对于栈和队列的使用能想到什么时候派上用场就能解决很多暴力麻烦的问题。2.⽐较含退格的字符串(easy)题目意思就是当遇到‘#’ 的时候就进行删除上一个字符题目并不难,主要是要学会总结,理解题目要求后,不要急于写代码,只需要搞懂题目意思然后理清思路和解题方法在进行书写。3.基本计算器 II(medium)题目意思很好理解,就是只实现一个有加减乘除表达式的算式,没有括号的存在就可以不采用后缀表达式。原创 2024-10-26 21:29:47 · 978 阅读 · 0 评论 -
专题十五_字符串_算法专题详细总结
模拟题目主要就是考察代码的实现,暴力就能求解出来,细心一点,遇到bug就多观察,你一定可以写出来。2.最⻓回⽂⼦串 (medium)题目意思很简单,就是求最长的回文字串这种题目第一次做不会写可以理解,但是一旦写会了就要做好总结,认真吸收算法方案。3.⼆进制求和(easy)二进制求和,其实就是跟字符串相加没什么区别,只要把字符串相加写得熟练一点,这简直不在话下,换汤不换药。这都是字符串同一类型的题目,只要写会了,就不会有什么大问题。都是判断进位,然后添加进位,在判断是否有越界的情况。4.原创 2024-10-24 12:26:35 · 883 阅读 · 0 评论 -
专题十四_哈希表_算法专题详细解答
存储数据的键值对 题目不是很难,注意是要学会优化的思想来解决,合理运用哈希表的查找功能,及大优化时间复杂度。2.判断是否互为字符重排(easy)题目意思真的太简单了,就一眼哈希题目真的不难,这题就真的很经典,适合熟练掌握hash的用法。3.存在重复元素 I(easy)我嘞个豆芽,这题一眼哈希,真的简单啊,找是否出现过相同的元素还是非常好对hash表有个熟练的理解,其实虽然这种题简单,但是只要学熟练了,这个步骤也就是苦难题里面的一小步,所以还得熟练掌握才行。4.原创 2024-10-23 20:22:12 · 770 阅读 · 0 评论 -
专题十三_记忆化搜索_算法专题详细总结
猜出所有数字的情况,head作为头节点,如果大了,就定义x去[left,head-1]位置去找,如果小了就定义y去[head+1,right]区间去找,然后都返回的是两边的最小值,让用到的钱最小,然后对两边的值取最大max(x,y) 这样能保证,这个最小值里面的最大值可以让当前层的所有花费都被满足,但是当前层后续有很多种随机取值的方式,所以我们要考虑到最便宜的一种就是最后当前层随机取值的所有情况都要取min。那么当从最后一个数往前求的时候,唯一可以顾及到的就是当前数的后面的所有数。也就是当前位置的决策树。原创 2024-10-19 10:53:04 · 1075 阅读 · 0 评论 -
专题十二_floodfill(洪水灌溉)算法_算法专题详细总结
这就跟上一个专题的那个深度优先遍历二维矩阵的方法一模一样,简直手拿把掐,就是设置全局变量,然后再一个点开始直接进行递归一次,出来即可。2.岛屿数量(medium)题目意思很简单,就是看有几个 1是联通的就是说明分几块区域。这个是一道狠狠狠经典的floodfill的题目,一定要做会做熟做透!3.岛屿的最⼤⾯积(medium)题目意思很简单,但是这题跟上面几题有那么一点点的不一样,一定要思考到位。就是要专门总结这一题跟上面一题的区别,这题是求岛屿的面积,那么就要单独把计算拿出来进行计算;原创 2024-10-18 17:52:24 · 1128 阅读 · 0 评论 -
专题十一_递归_回溯_剪枝_综合练习_算法专题详细总结
这一题相对来说还是十分简单的,就是上一个专题的最后一题求子集,只要递归函数体能写对,那怎么写这题都能过。2.全排列 Ⅱ(medium)题意很简单就是对全排列后的所有数组添加到ret后去掉所有重复的数组。全排列II跟全排列I一样,思路是一模一样,就只是再剪枝的策略上有所不同,只需要画清楚决策树,就可以完美的解决剪枝的策略。3.电话号码的字⺟组合(medium)题目意思挺简单的,就是给你一个字符串数字,然后针对每个数字的按键的字符串中的字符进行组合,求出所有情况的子集。原创 2024-10-12 11:25:02 · 918 阅读 · 0 评论 -
专题十_穷举vs暴搜vs深搜vs回溯vs剪枝_二叉树的深度优先搜索_算法专题详细总结
只要能分析出当前问题的相同子函数,就可以得出函数体里面的内容,通过所有相同的子函数的内容进行一步步操作就能完成当前函数的任务。2.求根节点到叶节点数字之和(medium)题意还是比较好理解的,就是对从根节点开始一直到叶子节点,计算每个节点当前值不断*10最后所有叶子节点的和像这种带有回溯类的问题,只需要考虑清楚带上的临时变量不会再中途被改变,并且再返回上一层稳定即可。原创 2024-10-05 22:21:52 · 1168 阅读 · 0 评论 -
专题九_递归_算法专题详细总结
C语言+数据结构(二叉树、快排、归并)函数自己调用自己的情况这里唯一需要注意的就是当x上的盘子移动到z上时,唯一的不同就是要将x.back()也就是最后一个元素移动到z上,并不是首元素进行移动。2.合并两个有序链表(easy)这题在上一个链表专题已经写过迭代的版本,就是利用多个指针,将较大值连接在较小值的后面,然后移动指针。循环(迭代)vs 递归这些都是解决重复子问题证明他们都是可以互相转换的,那么什么时候循环舒服?什么时候递归舒服?原创 2024-10-03 23:19:00 · 1056 阅读 · 0 评论 -
专题八_链表_算法专题详细总结
开始我想到挺简单的,创建新的链表,然后进行链接,就是采用头插法,本来挺成功的,就这里卡了我一个小时,各种调试都没过,最后还是去看题解了,才发现用头插法连接到原链表上居然失效了,只能再原链表上直接进行翻转。两个链表相加考虑进位,其实是挺简单的链表操作,可以直接在原链表上操作,一定要想清楚再写代码,这样负担很小,不要直接上手就写,但凡有一点思路不清楚就去画图!题意很简单,两两交换链表间的节点,比如【1,2】【3,4】【5,6】等等,没有重复的节点,那么就要考虑的是,交换之后,怎么有链接回原来的链表。原创 2024-09-25 22:47:01 · 1179 阅读 · 0 评论 -
专题七_分治_快排_归并_算法专题详细总结
这个代码真的很完美强烈建议默写一百遍!随机取值,数组分三块~3.快速选择算法(medium)这题也是本个章节的重点,topK问题这题是跟上题快排大差不差,唯一不同就是再最后的递归部分,考虑清除边界条件//分情况讨论:4.最⼩的 k 个数(medium)这一题仍然是TopK问题,那么这题正好跟上一题相反,找到最小的k个数想着一系列TopK问题都是利用数组分三块,然后在递归部分来进行缩小范围,直到满足结束条件,最后终止。分治 - 归并排序5.归并排序(medium)原创 2024-09-22 13:01:32 · 768 阅读 · 0 评论 -
专题六_模拟_算法详细总结
像这种模拟题,就要尽可能的想到简便的办法来进行优化,其实很简单。2.提莫攻击(easy)这题题意很简单,就是再中毒时间内,如果继续被攻击,那么就刷新中毒时间,从头开始,那么只需要计算数组每两个数之间的间隙大小是否大于中毒时间即可。对于这种题目有点复杂的模拟,就一定要耐心找到规律,就会变得很简单,重点就是如何把规律变成代码的形式。4.外观数列 (medium)这题相对来说真的比较简单了,只要理解题目意思,真的模拟起来so easy~原创 2024-09-20 00:01:58 · 923 阅读 · 0 评论 -
专题五_前缀和_算法专题详细总结
可以看出,前缀和就是要求出 前缀和数组 ret数组第i位的值的时候,可以通过它的前一位和nums[i],来得出当前的值。2.【模板】⼆维前缀和(medium)int main()//1.读入数据i原创 2024-09-18 13:44:26 · 972 阅读 · 0 评论 -
专题四_位运算( >> , << , & , | , ^ )_算法详细总结
用bitMap来创建一个相当于int型的数组,i来存储每一位字符该移动的位数,那么就将bitMap>>i移动i位后,在跟1进行按位与,如果第一位都是1,那么就会得到1,说明之前就重复存在过,返回false只要没有返回false 说明都是第一次出现,那么就将他bitMap这一比特位进行改变为1 ,先将1原创 2024-09-17 21:07:11 · 1150 阅读 · 0 评论 -
专题三_二分查找算法_算法详细总结
二分查找经典题目。首先最重要的就是判断循环的结束条件,left>right,因为在这之前,left==right的时候,仍然要判断一次nums[left]是否等于target,所以循环条件就是while(left原创 2024-09-09 23:11:11 · 1030 阅读 · 0 评论 -
专题二_滑动窗口_算法专题详细总结
滑动窗口,要从暴力推导到优化还是比较好想的,滑动窗口,是保证两个指针left跟right依次往前运动,不后退,保证了效率的提升,不用产生无用的操作。这题就是1.先要保证进窗口,//进窗口,一定要在前面这个就是进窗口的条件,当nums[right]==0 _k++;2.那么现在考虑出窗口,while(_k>k) 在这个循环条件里面进行出窗口,其实仔细一些,如果在_k==k 时出窗口是不完美的,你还要保证nums[right+1]这个时候也是等于0 的。原创 2024-09-08 12:23:54 · 941 阅读 · 0 评论 -
专题一_双指针_算法专题详细总结
利用双指针,cur=0,dest=-1,只要nums[cur]==0 dest就走两格;否则 dest走一格;但是无论怎么样cur都走一格。直到dest到达结尾处n-1 停止,即 判断dest>=n-1 处 break;原创 2024-09-06 06:00:00 · 1063 阅读 · 0 评论