- 博客(56)
- 收藏
- 关注
原创 PPMP_char3
五一过后,有些工作要赶,抽出时间更新一下。这一章基本都熟练掌握,在做习题过程中有一些思考。这里涉及到了一点点GEMM(矩阵乘),GEMM有太多可深挖的了,推荐一篇博客。另外,我还发现上一篇博客,有写错的地方,这篇博客的末尾做了一下勘误。这里记录我的个人理解,有不正确的地方,欢迎留言或者私信讨论。
2024-05-12 17:49:00 633
原创 PPMP_char2
这几年,断断续续地自学了一些cuda编程,是从一些博客、视频里学的,属于是零敲碎打,不够系统、全面。偶然间,发现了《Programming Massively Parallel Processors A Hands-on Approach, 4th Edition》,这本书很棒,便萌生了仔细系统地学习CUDA的想法。以前有一些基础,这次主要在于深入理解+查缺补漏,知识点方面不做过多记录,重点是课后习题及相关程序。争取做到周更,每周看完一章。我的答案和理解,可能有错误和纰漏的地方,欢迎评论指正。
2024-04-26 11:00:47 1723 1
原创 代码随想录结课总结
同时,也能看出卡哥在选题的类型、题目的顺序上,是做了精心安排的、是下了大功夫精心设计过的----一个大类型题里往往包含了几个小题型,卡哥每个小题型选几道题,带着一起做一遍。训练营结束后,大大小小、各种类型、翻来覆去,也算是见了十几二十多种算法题吧,经历过这轮的学习和训练,再遇到类似的题,不管我能不能做出来,我是完全不慌的,因为掌握了这些知识之后,我大概率是能做对的。如果让我自己学的话呢,我确实很难get到这么多知识点,很难自己就总结出这些解题步骤,而且很多力扣上的题解,很难理解的,自己看的话很难理解透彻。
2023-09-24 07:21:50 1196 1
原创 力扣第39天----第198题、第213题、第337题
采用的时候,下一层就不能采用,就是left[0]、right[0],然后再加起来;不采用的时候,下一层就要综合考虑,所以max(left[0], left[1])、max(right[0], right[1]),左右分支都要考虑到,再加一起。 初始化----这里与截止条件重合,树遍历终止的时候,就是dp数组初始化的时候,初始化为{0,0},即空节点时价值为0。 遍历顺序----采用树的遍历方式,这里采用后序遍历。 dp数组----每个节点不采用、采用状态下,得到的金钱;跟着做下来,基本消化了吧。
2023-09-11 16:26:33 194
原创 力扣第37天----第322题、第279题
整体思路,跟前面的几道完全背包差不多,就不具体解释了。有一些细节要注意,见代码注释。 跟上一题,基本一样。
2023-09-10 23:21:38 161
原创 力扣第36天----第518题、第377题
递推公式,就跟爬楼梯差不多,根据当前的coins[i],找到对应的dp[j - coins[i]],然后再叠加。 循环顺序,跟0/1背包不同,采用正序排列,因为可以重复叠加。并且要先遍历物品,再遍历背包容量–这样可以表示组合。 dp数组表示金额为j时的组合数----题目里问什么,dp就定义成什么,这道题里问组合数量。 跟518题差不多,就是遍历顺序相反,先遍历背包,再遍历物品。
2023-09-09 19:16:05 135
原创 力扣第35天----第1049题、第494题、第474题
0/1背包问题,滚动数组的方式。有套路的,反复做题,消化这个套路。 滚动数组,时间复杂度O(n2),空间复杂度O(n)。如果采用动态规划–二维数组,时间复杂度O(n2),空间复杂度O(n*m),m为dp数组大小。如果使用回溯,那么肯定会超时,时间复杂度O(2^n)。public://容量为target的背包所能背的最大重量。//最多30个石头,每个石头最多100重量,平分的话,少的部分不会超过1501;//计算target应该是多少。
2023-09-09 15:55:10 121
原创 力扣第33天----第343题、第96题
递推公式,挺像找规律的。逐渐理解了动态规划,自低而上的思想,从0,1… 这题优点费劲,不是太理解,希望二刷时候能独立做出来。
2023-09-04 13:56:26 38
原创 力扣第32天----第62题、第63题
递归的实现方式相对简单,但由于存在重复计算的问题,效率可能较低。递归是一种自顶向下的求解方法,而动态规划是一种自底向上的求解方法。 动态规划将问题分解成若干个子问题,用于求解最优化问题。递归是一种自顶向下的求解方法,而动态规划是一种自底向上的求解方法。 记住5步,加深记忆。
2023-09-02 13:24:02 31
原创 力扣第31天----第509题、第70题、第746题
记住这五步,今天就够了–dp数组含义、递推公式、初始化、便利顺序、打印dp数组。 记住这五步,今天就够了–dp数组含义、递推公式、初始化、便利顺序、打印dp数组。 记住这五步,今天就够了–dp数组含义、递推公式、初始化、便利顺序、打印dp数组。
2023-09-02 01:42:34 41
原创 力扣第26天----第122题、第55题、第45题
这个题,属于见过就会做。实现上没难度,分析起来花点时间,下次见到类似的能做出来。核心就是:1)根据i + nums[i]做是否满足的判断;2)for循环end的位置更新为max(end, i + nums[i])。 有点难,看了答案才做出来的。逻辑不好梳理,希望下次做,能做出来。 赚钱的时候,把每天赚的钱加起来,就是最终的钱。
2023-08-26 12:37:50 28
原创 力扣第25天----第455题、第376题、第53题
这题情况挺多,试了好几次才过,但是总结起来,没啥好提炼的知识点。如果没有明显的反例,就可以用贪心算法试试。 类似于找规律,然后实现出来。 贪心算法,没有固定的套路。
2023-08-25 11:01:50 33
原创 力扣第24天----第491题、第46题、第47题
这个题,由于不能排序,不能使用全局变量进行监控,要在函数内部创建监控变量(unordered_set myset),进行判断。这样,每次递归时都会创建一个新的监控变量,这个监控变量,监控这一层的情况。这里元素不能重复使用,所以通过vector used(nums.size(), false),记录每个元素是否被使用,然后遇到已经被使用过的,跳过即可。而且要求排列,不能使用通过startindex,只能通过used记录每个元素是否被使用,然后遇到已经被使用过的,跳过即可。
2023-08-23 11:40:51 32
原创 力扣第23天----第93题、第40题、第131题 - 副本
就是要分析出,搜集子树上每个节点对应的路径,而不只是叶子节点的路径。然后,再把每个节点代表的路径,加入到result里。 这道题,挺费劲。回溯的思路,跟上一题的分割的思路挺像。不断地分割子区间,碰到不满足的就回溯。挺麻烦的,加入了字符串判断。 第78题、第40题的结合。知识点上,没有新的。
2023-08-22 20:38:05 35
原创 力扣第22天----第39题、第40题、第131题
首先对数组排序,保证相同数值的元素相邻,通过used数组,控制某些情况被剪枝掉----使用元素可以重复,但是结果中不能重复。这样就要求当前元素被使用时,前一个元素不能被使用,可以当前元素和前一元素都被使用。如果,当前元素被使用,而前一元素没有被使用,那么这种情况,前一元素的分支前做过,就可以去重了,而且题目中也要求不能重合。譬如’aab’,构建为’a‘、’aa‘、’aab‘这三种,然后再逐渐递归遍历,每次递归时都进行判断,然后回溯。 还是经典的回溯的套路----确定参数、返回来类型;
2023-08-21 20:07:25 55
原创 力扣第21天----第216题、第17题
string数组,string本身就相当于一个数组,所以string数组是一个二维数组。通过digits的索引找到相应的字母,然后再递归+回溯,提取其中的字母组合。 回溯,都可以用树表示。
2023-08-19 20:34:15 38
原创 力扣第20天----第77题
有递归就有回溯,回溯与递归同时发生。类似于二叉树的递归法(DFS),回溯也是三部曲----参数及返回值、终止条件、单层逻辑。通常回溯的返回值都是void,对全局变量进行回溯。
2023-08-18 10:54:22 34
原创 力扣第19天----第669题、第108题、第538题
与105、106题较类似,整体思路也是不断递归划分数组,然后构建左右子树,建立与根节点关联。 右中左的遍历顺序,把上一位置根节点数值,加到现在这一位置上,然后再移动pre指向。 也是一道,挑选相应节点,返回节点的题。
2023-08-17 19:56:26 36
原创 力扣第15天----第513题、第112、113题、第106题
106题,实现时很麻烦,要很小心、很注意。思路:后序遍历找中节点,并建立跟节点root→前序遍历找中节点index→前序遍历拆分左右子树→后续遍历拆分左右子树(根据前序左子树的大小)→递归实现,左右子树的构建(返回子树的根节点)→root的left、right分别指向左右子树的根节点。 大概明白了吧,重点在于回溯的运用。 112题,采用后序遍历,其实对于中节点,没有处理。 113题,跟上面一道题,不太一样,费了点劲。 105题,跟106题,基本上一模一样的。
2023-08-16 23:25:56 61
原创 力扣第18天----第235题、第701题、第450题
这道题,就是在一个二叉树中找节点。无所谓前序、中序、后序,这里就只用到了左右子树,没有用到根节点。左右子树、根节点数值比较下,从上往下找,一旦发现夹在了p和q中间,就找到了节点。 跟着答案做下来,感觉还行。跟上一题类似,根据key与root的大小关系,找对应的节点位置。找到节点位置,就触发终止条件。 这里呢,也是不断地判断向左和向右,根据大小判断找到合适的位置,找到位置后新建一个TreeNode,并建立相应的链接。
2023-08-16 21:34:52 25
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人