<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[DitanZ的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/DitanZ</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; DitanZ]]></copyright><item><title><![CDATA[从0自学大模型——Pytorch]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/149936423</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/149936423</guid><author>DitanZ</author><pubDate>Tue, 05 Aug 2025 14:10:41 +0800</pubDate><description><![CDATA[]]></description><category></category></item><item><title><![CDATA[DP回顾 考前必看]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146389493</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146389493</guid><author>DitanZ</author><pubDate>Thu, 20 Mar 2025 10:11:28 +0800</pubDate><description><![CDATA[总结：一样的思路，只要在遍历边缘的时候遇到石头后面的就是直接break，便都是0（初值为0），在遍历中间的时候，只要遇到石头，那一块就是不可达，然后else正常递推即可。总结：整数拆分首先要明确dp的含义，其次是关于i与j的遍历，i是要遍历从2到n的，因为i是表示被拆解的整数，而j是遍历如何拆解，总结：对比起那么的爬楼梯只是要把数组设为二维的，而且要记住先遍历边缘的，最后再处理中间的。总结：很简单，根据五部曲很容易得到，但有一个边界问题是：dp[i]=dp[i-1]+dp[i-2];]]></description><category></category></item><item><title><![CDATA[回溯考前总结]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146361505</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146361505</guid><author>DitanZ</author><pubDate>Wed, 19 Mar 2025 11:20:04 +0800</pubDate><description><![CDATA[3.传参，不能重复分割，所以传i+1。1.组合总数给定一个无重复元素的数组 candidates 和一个目标数 target ，找出 candidates 中所有可以使数字和为 target 的组合。思路：首先要映射，其次就是这里是两个不同集合之间的组合，所以一个要注意终止条件是index==数字的长度（即横向长度），组合中只允许含有 1 - 9 的正整数，并且每种组合中不存在重复的数字。总结：本题相比于上题，数组中可以有重复的数字（题目给的），并且target组合中不能有重复的数字（传参要传i+1）]]></description><category></category></item><item><title><![CDATA[代码随想录 DP day2 ]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146234644</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146234644</guid><author>DitanZ</author><pubDate>Thu, 13 Mar 2025 16:44:46 +0800</pubDate><description><![CDATA[dp[i]=max(dp[i],max((i-j)*j,j*dp[i-j])  这里是很容易想不清楚的，我的理解是，每次新的最大乘积要要和原来的乘积对比，这个是很好理解的，关键是新的最大乘积是如何得出的呢？其实我们找最大乘积的过程就是在找这个相近的数字，所以我们不知道拆分后是否还需要继续拆分，比如说6 是拆成3 和 3还是3和 3再拆分变成 1 和 2？思路：本题要求相加组合的最大乘积，需要知道一个结论，就是相加组合中数字之间差值越近，相乘越大，所以本题就是不断拆分，不断更新的过程。]]></description><category></category></item><item><title><![CDATA[代码随想录 DP day2]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146229365</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146229365</guid><author>DitanZ</author><pubDate>Thu, 13 Mar 2025 14:07:03 +0800</pubDate><description><![CDATA[其次就是遍历条件，在遍历边上的时候当遇到障碍物就直接break。因为第一行和第一列只有一种走法，中间若有障碍物则后面都走不通。思路：对比之前的不同路径多了一个障碍物，首先考虑边界条件：起点或终点有障碍物时，那么无论如何路径都为0。最后是递推公式，只要保证当遇到障碍物的时候continue跳过即可，因为有障碍物的默认为0种路径。总结：在有障碍物的情况下要抽象成0条路径，将其普适化，这样递推公式依旧能够适用。]]></description><category></category></item><item><title><![CDATA[代码随想录 DP day2]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146227722</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146227722</guid><author>DitanZ</author><pubDate>Thu, 13 Mar 2025 13:21:15 +0800</pubDate><description><![CDATA[总结：要注意for循环中i的范围，dp的下标要一直到cost.size()，因为dp[i]表示的是一直到i层需要花费的cost最小总和，而顶层则是下标为cost.size()思路：首先注意题目中只可向右和向下，那么递推关系就只需要考虑左边移一步和上面向下一步，所以递推关系就显而易见了，就是左边一步和上面一步的路径和相加。思路：递推公式和爬楼梯类似，都是思考第i层由什么得来的呢？即i-1和i-2加上对应的cost。这题只要递推关系出来了其他的四部曲就比较简单，不再赘述。]]></description><category></category></item><item><title><![CDATA[代码随想录 DP开始]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146207380</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146207380</guid><author>DitanZ</author><pubDate>Wed, 12 Mar 2025 16:18:54 +0800</pubDate><description><![CDATA[前言：磨磨蹭蹭的终于来到了DP，科大的校线还没出，一想到很可能出线的那天就是我复试生活结束的那天，还是有些伤感的，但慢慢的就体会到，生活中没有那么多付出——回报的过程，更多的是付出——失败，再起身，等待下次命运的审判^-^，看到身边的人付出有了回报，我真心祝愿他们一直这样意气风发，而那些失意的人，希望幸运就在转角处，多坚持一下下把！首先题目规定了只能走一步或者两步，那么我们思考若计算dp[n]，再往前推一次是什么呢，那就是dp[n-1]走一步到n，dp[n-2]走两步到n,这样我们的递推公式就出来了。]]></description><category></category></item><item><title><![CDATA[代码随想录 贪心]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146132158</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146132158</guid><author>DitanZ</author><pubDate>Wed, 12 Mar 2025 15:52:07 +0800</pubDate><description><![CDATA[思路：计算每一个站获得，并且到下一个站的差值，即cost[i]-gas[i]，将其不断累加到cur，而cur是不同起点的当前总和，若cur<0，即无法到达下一站，则更新startIndex=i+1，并且重置cur=0。为什么更新到i+1？因为一段路，只要从start到i+1无法达到，那么中间任何一个作为起始节点都达不到i+1。而另一个变量sum不会重置，只要sum>0，说明存在一个起点。]]></description><category></category></item><item><title><![CDATA[代码随想录 贪心]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146164999</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146164999</guid><author>DitanZ</author><pubDate>Mon, 10 Mar 2025 21:56:52 +0800</pubDate><description><![CDATA[总结：sort的排序逻辑经常出bug，原因是写bool类函数的时候没加上static，而由于迭代器是从前至后，所以要从小到大，a<b即可，直接返回排序逻辑。思路：本题还需要一定的读题能力，读懂了思路并不难，主要是判断是否重合，若重合，怎么判断下一个也是重合的，这时候就要更新最右边界。]]></description><category></category></item><item><title><![CDATA[代码随想录 贪心^]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146114199</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146114199</guid><author>DitanZ</author><pubDate>Sat, 08 Mar 2025 13:05:42 +0800</pubDate><description><![CDATA[思路：要保证每一个饼干都分配到最合适的胃口，即保证饼干的大小>=胃口才行，所以我们把两个数组有序排列，并且逐个对比。ps：两个for循环也是可行的，只是会超时。思路：老实说做的时候不太懂这个概念，稀里糊涂的。终于磨蹭磨蹭到了贪心了。]]></description><category></category></item><item><title><![CDATA[代码随想录 还是回溯 已吐]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146103679</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146103679</guid><author>DitanZ</author><pubDate>Fri, 07 Mar 2025 20:09:54 +0800</pubDate><description><![CDATA[总结：回溯就是一个巨大的板子，各种情况可以不同组合，不同情况又有其对应的板子，只要板子熟练，这类题目不难。思路：区别上题，本题会有重复元素，但又不能包含重复的子集，所以要做到去重。我总结了去重的二要素，在注释中。主要区别组合问题即可。]]></description><category></category></item><item><title><![CDATA[代码随想录 回溯]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146102244</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146102244</guid><author>DitanZ</author><pubDate>Fri, 07 Mar 2025 18:26:07 +0800</pubDate><description><![CDATA[会遍历无效组合，比如说横向分割的时候就不是回文串，纵向时又找到若干组合，但起始就是错的就会出现很多无效组合，所以一定要跳过无效的横向组合。因为只要非空字符串必有一组可以成立的分割组合，而index代表开始分割的位置，当分割到最后一个或大于最后一个，即全部分割完了。当横向遍历，尝试分割更长的字符串时（这里是横向和纵向没了解清楚），横向的时候startIndex是不变的，变得是末端i的位置。纵向：选择了第一次分割的若干情况的一种，然后继续分割剩余的情况。横向：初次分割的位置，剩下的没分割的就交给纵向分割。]]></description><category></category></item><item><title><![CDATA[代码随想录 回溯 启动！！！]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146090215</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146090215</guid><author>DitanZ</author><pubDate>Fri, 07 Mar 2025 11:33:25 +0800</pubDate><description><![CDATA[思路：做回溯，逐渐意识到，只要会写组合问题，其他回溯问题只要明白其与组合问题的区别，问题就迎刃而解。思路：比起上题不可以用重复元素，并且组合也不能重复，然而数组中仍可出现重复数字，所以要保证去重（暂时不太懂）2.判断条件是sum==target，而不是index是否等于组合内数字个数。作为void函数，是可以自然的遍历结束，不返回任何值的。，编译器会报错，因为函数必须返回一个。那么问题就很好解决了，再稍作剪枝即可。，函数会自然结束（因为它是。函数中，如果没有执行。函数中，如果没有执行。]]></description><category></category></item><item><title><![CDATA[代码随想录 回溯]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146079798</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146079798</guid><author>DitanZ</author><pubDate>Thu, 06 Mar 2025 20:42:26 +0800</pubDate><description><![CDATA[答：设置一个vector<string>,再通过减'0'来将字符串中的数字字符转为真正的数字，再通过设定一个letter记录映射字符串。关于index和i的关系：index是数字字符串中的索引，而i是数字映射的字符串的索引。关于终止条件中的return位置。]]></description><category></category></item><item><title><![CDATA[代码随想录 回溯]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146076730</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146076730</guid><author>DitanZ</author><pubDate>Thu, 06 Mar 2025 18:33:27 +0800</pubDate><description><![CDATA[而递归中关于index与i的关系也容易搞混，要明白index是我们后面传参的，而i是在for循环中不断变化的，准确的说是i带动index变化，而要保证递归每次向后，初始时，i就要=startindex，而startindex我们又可以初始传参给他赋值。总结：还是对终结条件半懂不懂，但大概可以理解为，首先要保证组合中个数不能超过规定个数，当等于个数时，判断是否是题目需要的，不需要，return，弹出，再遍历，若需要，插入result，再弹出，继续遍历。例如 【1，2 】【2，1】]]></description><category></category></item><item><title><![CDATA[代码随想录 层序遍历]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146059582</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146059582</guid><author>DitanZ</author><pubDate>Thu, 06 Mar 2025 10:12:23 +0800</pubDate><description><![CDATA[ps：这里要知道point->children也可以用.size()，因为children是由vector记录的。思路：多由左右孩子变成N个孩子，只需要多加一个for循环，将所有孩子压入队列。思路：同层序遍历，只要保证每次记录的是一行最后一个即可，即size-1。思路：同样的，只需在遍历每一层的时候设置一个变量记录平均值即可。]]></description><category></category></item><item><title><![CDATA[代码随想录 层序遍历]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146048946</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146048946</guid><author>DitanZ</author><pubDate>Wed, 05 Mar 2025 17:59:46 +0800</pubDate><description><![CDATA[思路：使用一个队列，将每一层的元素以从左至右录入，设置一个size，记录每一层的长度，在每次弹出size个元素，并在弹出时将左右孩子push进队列。总结： 本体要求从下至上，那么已保存从上至下的result直接一个reverse，反转数组即可。总结：一定要保证for循环内的size是固定值。]]></description><category></category></item><item><title><![CDATA[代码随想录 树]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/146045551</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/146045551</guid><author>DitanZ</author><pubDate>Wed, 05 Mar 2025 16:29:47 +0800</pubDate><description><![CDATA[树的遍历其实可以直接按根左右这种直接写函数，push即为根，传cur->right即为右，同理left即为左，同时在第一行先加判断语句，这样函数就写完了，直接传参即可。总结：递归需要传参时要明确 是否需要修改？]]></description><category></category></item><item><title><![CDATA[从0开始准备华五复试 栈和队列]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/145860836</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/145860836</guid><author>DitanZ</author><pubDate>Tue, 25 Feb 2025 19:40:27 +0800</pubDate><description><![CDATA[思路：遇到匹配问题栈一般最好解决，首先我们可以先遍历字符串，因为括号匹配中，往往是左边在前，所以当我们遍历字符串时，会先遍历左边的括号，所以每遍历一种括号，我们就将对应类型的右括号压栈中，又因栈符合先进后出，所以最后一个的左括号对应的右括号，一定在栈顶，而第一个就在栈底，所以我们再用一个if判断和栈顶元素是否一致，若一致，则匹配成功，出栈，不一致或是栈已经空了，则匹配失败。ps：经常会犯两个条件的先后问题，比如注释行，应先判断是否为空，然后在用top进行对比。]]></description><category></category></item><item><title><![CDATA[从0开始准备华五复试 字符串]]></title><link>https://blog.youkuaiyun.com/DitanZ/article/details/145810189</link><guid>https://blog.youkuaiyun.com/DitanZ/article/details/145810189</guid><author>DitanZ</author><pubDate>Sun, 23 Feb 2025 15:03:14 +0800</pubDate><description><![CDATA[思路：思路很简单，就是先翻转整个数组，再利用n作为分界，分别翻转两个字符串。]]></description><category></category></item></channel></rss>