<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[charmingkai的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/charmingkai</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; charmingkai]]></copyright><item><title><![CDATA[第45-46天学习笔记——DP真题]]></title><link>https://blog.youkuaiyun.com/charmingkai/article/details/133529536</link><guid>https://blog.youkuaiyun.com/charmingkai/article/details/133529536</guid><author>charmingkai</author><pubDate>Tue, 03 Oct 2023 21:24:56 +0800</pubDate><description><![CDATA[序列dp
	路径问题
		【DP】华为2023秋招-PCB印刷电路板布线（难题，好好理解）
			BFS + 路径DP
				首先我们需要根据原矩阵，构建出每一个位置干扰值叠加的结果，得到一个新的矩阵grid_new。这里显然就是一个基于BFS计算层数的问题。
				在得到新的矩阵grid_new之后，问题就转变为，对grid_new构建一条从左上到右下的路径，每次只能够向右或向下移动，路径经过的点的总和需要最小。这是一个经典的路径DP问题，和LeetCode64、最小路径和完全一致。
				要特别注]]></description><category></category></item><item><title><![CDATA[第39-40天学习笔记——动态规划DP]]></title><link>https://blog.youkuaiyun.com/charmingkai/article/details/133254532</link><guid>https://blog.youkuaiyun.com/charmingkai/article/details/133254532</guid><author>charmingkai</author><pubDate>Sun, 24 Sep 2023 22:23:52 +0800</pubDate><description><![CDATA[动态规划算法的核心就是记住已经解决过的子问题的解
	斐波那契数列是一个非常好的题目，既与递归有关，也与DP有关。可以从这个简单问题，思考递归与DP的内在关联。
	递归往往是从后往前计算
	DP往往是从前往后计算
	
	用DP解题，一般要思考三个重要问题。
	DP数组的定义是什么？
	动态转移方程是什么？
	如何对DP数组进行初始化？
	解答了这三个问题，代码基本上呼之欲出。千万不要拘泥于复杂的定义，要重理解而轻概念。
	
	动态规划（序列DP）
	入门问题（理解DP基础概念）
		LeetCode 509、]]></description><category></category></item><item><title><![CDATA[第37-38天学习笔记——位运算]]></title><link>https://blog.youkuaiyun.com/charmingkai/article/details/133164485</link><guid>https://blog.youkuaiyun.com/charmingkai/article/details/133164485</guid><author>charmingkai</author><pubDate>Fri, 22 Sep 2023 11:57:05 +0800</pubDate><description><![CDATA[位运算
	异或运算：^ 相同为0，不同为1
	几种常用运算符
		
		
	不需要额外空间的方法，就往位运算上想
	假设 a = 1, b = 0
	1、 1 ⊕ 0 = 1, 0 ⊕ 0 = 0 =&gt; a ⊕ 0 = 1, b ⊕ 0 = 0 ==&gt; 任何数与0做异或运算结果均为其本身
	2、 1 ⊕ 1 = 0, 0 ⊕ 0 = 0 =&gt; a ⊕ a = 0, b ⊕ b = 0 ==&gt; 任何数与其本身做异或运算结果均为0
	3、 1 ⊕ 0 ⊕ 1 = 0 =&gt; 1 ⊕ ]]></description><category></category></item><item><title><![CDATA[第31-32天学习笔记——DFS/BFS]]></title><link>https://blog.youkuaiyun.com/charmingkai/article/details/132955792</link><guid>https://blog.youkuaiyun.com/charmingkai/article/details/132955792</guid><author>charmingkai</author><pubDate>Sun, 17 Sep 2023 22:10:53 +0800</pubDate><description><![CDATA[DFS / BFS
	深度优先搜索DFS
		“ DFS以LeetCode、695岛屿题为模板进行解决 ”
		LeetCode 200、岛屿数量
			最好按照695题的模板来写，统一成一个模板
			先初始化一个二维数组（初始化为0，代表当前网格没有被访问，1代表当前网格被访问过），循环遍历当前位置的上、下、左、右四个方向访问网格中的元素，如果发现新位置是陆地，并且没有被标记过，递归搜索新的位置(绿色的位置周边都已经被搜索过了，所以来到上面的1的位置，上面的1的位置周边也已经搜索过了，就来到上面的1的右]]></description><category></category></item><item><title><![CDATA[第29-30天学习笔记——回溯真题]]></title><link>https://blog.youkuaiyun.com/charmingkai/article/details/132908175</link><guid>https://blog.youkuaiyun.com/charmingkai/article/details/132908175</guid><author>charmingkai</author><pubDate>Fri, 15 Sep 2023 17:14:43 +0800</pubDate><description><![CDATA[回溯真题
	这几道真题可以作为笔试真题模板进行参考
	感觉和LeetCode200、岛屿题是类似的模板
	【回溯】2023B-找到它
		注意，本题和LeetCode79. 单词搜索几乎完全一致，唯一的区别在于前者只要求判断是否能够找到该单词，本题还需要输出起始位置。
		注意回溯的选择条件
			(nx,ny)必须满足以下三个条件，才可以继续进行回溯函数的递归调用
			1. 不越界；2. 尚未检查过；3.在grid中的值grid[nx][ny]为word的下一个字符word[word_idx+1]
		]]></description><category></category></item><item><title><![CDATA[第27-28天学习笔记——二叉树经典题、回溯算法]]></title><link>https://blog.youkuaiyun.com/charmingkai/article/details/132862525</link><guid>https://blog.youkuaiyun.com/charmingkai/article/details/132862525</guid><author>charmingkai</author><pubDate>Wed, 13 Sep 2023 18:58:51 +0800</pubDate><description><![CDATA[二叉树经典题
	80% 二叉树的算法题基本上就是用递归
	LeetCode 105、从前序与中序遍历序列构造二叉树（重要，掌握）
		题目解读
			前序、中序
			
				

				
				
			在前序中找到根节点3，再在中序里找到左孩子节点9
			再举一个字母的例子，以中序为对应索引，然后遍历前序，找根节点和左右孩子节点
				
					

					

					
					
				
				
			
		代码编写思路
			通过哈希表把中序遍历序列中的值和顺序建立映射关系，通过 f]]></description><category></category></item><item><title><![CDATA[第25-26天学习笔记——递归、二叉树DFS、BFS]]></title><link>https://blog.youkuaiyun.com/charmingkai/article/details/132794259</link><guid>https://blog.youkuaiyun.com/charmingkai/article/details/132794259</guid><author>charmingkai</author><pubDate>Sun, 10 Sep 2023 18:46:34 +0800</pubDate><description><![CDATA[递归
	递归代码的组成部分：
		递归终止条件
		递归代码
		递归后的代码
		返回的结果
		
	递归的本质和基本实现方式
		1、函数通过自身调用自身
		2、通过函数体来进行的循环，递归通常不在意具体操作，只关心初始条件和上下层的变化关系。
		3、递归函数需要有临界停止点，即递归不能无限制的执行下去。通常这个点为必须经过的一个数。
			

			
			
		有点像栈，先处理倒数第一个函数，再把倒数第一个的输出放到倒数第二个函数里，继续处理
			

			
			
		
	递归思想
		递归]]></description><category></category></item><item><title><![CDATA[第20-22天学习笔记——贪心算法&二分查找]]></title><link>https://blog.youkuaiyun.com/charmingkai/article/details/132713766</link><guid>https://blog.youkuaiyun.com/charmingkai/article/details/132713766</guid><author>charmingkai</author><pubDate>Wed, 06 Sep 2023 13:52:59 +0800</pubDate><description><![CDATA[第二十天——贪心算法
	贪心算法(又称贪婪算法)是指，在对问题求解时，总是做出在当前看来是最好的选择。也就是说，不从整体最优上加以考虑，他所做出的是在某种意义上的局部最优解。
	LeetCode 455、分发饼干
		将孩子们的胃口值和饼干的尺寸先都按照从小到大进行排列，然后设置两个指针，如果饼干满足了孩子，孩子+=1，不管满不满足，饼干都要+=1
		时间复杂度：O(mlogm+nlogn)，其中 m 和 n 分别是数组 g 和 s 的长度。对两个数组排序的时间复杂度是 O(mlogm+nlogn)，遍历]]></description><category></category></item><item><title><![CDATA[第18-19天学习笔记——前缀和]]></title><link>https://blog.youkuaiyun.com/charmingkai/article/details/132642247</link><guid>https://blog.youkuaiyun.com/charmingkai/article/details/132642247</guid><author>charmingkai</author><pubDate>Sat, 02 Sep 2023 20:23:50 +0800</pubDate><description><![CDATA[第18天直播
	前缀和
		涉及到前几个元素的和的问题
		「前缀和」数组的思路是：将原始数组进行预处理，将来需要查询数据的时候，只需要查询预处理数组的某些值即可。
		前缀和是非常能体现利用空间换时间的算法思想，实现了快速计算区间和的作用。
		第一种定义：
		0、nums 数组长度为 N ， preSum 数组长度也为 N
		1、当 i &gt;= 1 ，preSum[i] 表示从 nums[0] 到 nums[i] 所有元素的和
		2、当 i = 0 ，preSum[0] = 0
		递推公式：]]></description><category></category></item><item><title><![CDATA[第16-17天学习笔记——链表&双指针]]></title><link>https://blog.youkuaiyun.com/charmingkai/article/details/132621516</link><guid>https://blog.youkuaiyun.com/charmingkai/article/details/132621516</guid><author>charmingkai</author><pubDate>Fri, 01 Sep 2023 12:15:58 +0800</pubDate><description><![CDATA[链表
	1、天然的具备递归性
	2、设置虚拟头结点，可以起到非常好的效果：添加虚拟头节点之后，原链表的每个节点的地位都是一样的，即怕删除的时候把原链表的头给删了就无法访问链表了
	[链表Linked List]是一种线性数据结构，其中每个元素都是单独的对象，各个元素（一般称为节点）之间通过指针连接。如果是单向链表，最后一个节点的下一个是null（None）
	和数组进行对比，链表中的节点中记录了连接关系，因此链表的存储方式相比于数组更加灵活，系统不必保证内存地址的连续性。
	链表的[节点Node]包含两项数]]></description><category></category></item><item><title><![CDATA[哈希表学习笔记——第13-15天内容]]></title><link>https://blog.youkuaiyun.com/charmingkai/article/details/132589073</link><guid>https://blog.youkuaiyun.com/charmingkai/article/details/132589073</guid><author>charmingkai</author><pubDate>Wed, 30 Aug 2023 19:25:02 +0800</pubDate><description><![CDATA[周一直播
	哈希表
		定义：哈希表通过建立「键key」和「值value」之间的映射，实现高效的元素查找。python对应是dict()
		注意：哈希表dict()是一个字典，键必须是唯一的，但值则不必。用来存放数组的元素值以及索引值d = {key1 : value1, key2 : value2, key3 : value3 }
		注意：哈希表的value不一定是一个值，可能是一个数组，包含很多部分...
		访问哈希表（字典）中的key/value，d.keys () / d.values()
	]]></description><category></category></item></channel></rss>