<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[m0_62301779的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/m0_62301779</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; m0_62301779]]></copyright><item><title><![CDATA[堆and优先队列]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128792318</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128792318</guid><author>m0_62301779</author><pubDate>Sun, 29 Jan 2023 20:37:13 +0800</pubDate><description><![CDATA[是一种抽象的数据类型，而是一种数据结构。是实现的一种方式。实现的方式有很多种，比如数组和链表。但是，这些实现方式只能保证插入操作和删除操作中的一种操作可以在 O(1)的时间复杂度内完成，而另外一个操作则需要在 O(N) 的时间复杂度内完成。而能够使的插入操作在 O(logN) 的时间复杂度内完成，删除操作在 O(logN)的时间复杂度内完成。是一种特别的二叉树，满足以下条件的二叉树，可以称之为1.；2. 每一个节点的值都必须 >=或者]]></description><category></category></item><item><title><![CDATA[leetcode数据结构入门 | 113.路径和II 450.删除二叉搜索树中的节点 203.二叉搜索树中第k小的元素 173.二叉搜索树迭代器 236. 二叉树的最近公共祖先]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128767664</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128767664</guid><author>m0_62301779</author><pubDate>Fri, 27 Jan 2023 19:31:57 +0800</pubDate><description><![CDATA[指针应初始化为一个不存在于 BST 中的数字，且该数字小于 BST 中的任何元素。根据根节点、左节点和右节点之间的相对顺序，可以进一步将深度优先搜索策略区分为： 先序遍历，中序遍历，后序遍历。左子树的最大节点或右子树的最小节点（找到该节点不是用dfs，直接一致找左节点或者右节点就好）深度优先搜索可以从一个根开始，一直延伸到某个叶，然后回到根，到达另一个分支。代替root,同时从左右子树中删除该节点，返回root。root只有左子树，返回root的左子节点。root只有右子树，返回root的右子节点。]]></description><category></category></item><item><title><![CDATA[leetcode数据结构入门 | 1249.移除无效的括号 1382.将二叉搜索树变平衡 108.将有序数组转化为高度平衡二叉搜索树 105.前序遍历+中序遍历=二叉树 103.二叉树的锯齿形层次遍]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128765165</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128765165</guid><author>m0_62301779</author><pubDate>Thu, 26 Jan 2023 20:42:49 +0800</pubDate><description><![CDATA[先序遍历中「 左边界+1 ， 左边界+1+左子树节点数目」个元素就对应了中序遍历中「 左边界 ,根节点定位-1」的元素。先序遍历中「 左边界+1+左子树节点数目，右边界」个元素就对应了中序遍历中「 根节点+1，右边界」的元素。利用哈希映射，键对值记录[节点的值，节点在数组中的位置]；可以利用「双端队列」的数据结构来维护当前层节点值输出的顺序。二叉搜索树→中序遍历→数组→二分/递归→平衡二叉搜索树。使用层序遍历，并只保留每层最后一个节点的值。在中遍历中定位根结点；在中序遍历中得到左子树节点数目，]]></description><category></category></item><item><title><![CDATA[leetCode数据结构入门 | 160.相交链表 82. 删除排序链表中的重复元素 II 24. 两两交换链表中的节点 707.设计链表 25.K个一组翻转链表 143.重排链表]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128757094</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128757094</guid><author>m0_62301779</author><pubDate>Thu, 26 Jan 2023 13:37:29 +0800</pubDate><description><![CDATA[1.因为链表不支持下标访问，所以我们无法随机访问链表中任意位置的元素。利用线性表存储该链表，然后利用线性表可以下标访问的特点，直接按顺序访问指定元素，重建该链表即可。需要把链表节点按照 k 个一组分组，所以可以使用一个指针 head 依次指向每组的头节点。这个指针每次向前移动 k 步，直至链表结尾。翻转一个分组内的子链表，还需要将子链表的头部与上一个子链表连接，以及子链表的尾部与下一个子链表连接。若是，就翻转这部分链表，否则不翻转。相当于两个指针都遍历了m+n的长度，后端对齐了。]]></description><category></category></item><item><title><![CDATA[leetCode数据结构基础 | 415.字符串相加 409.最长回文串 334.递增的三元子序列 238. 除自身以外数组的乘积 560.和为k的子数组 290.单词规律 763.划分字母区间]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128691960</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128691960</guid><author>m0_62301779</author><pubDate>Tue, 17 Jan 2023 17:07:14 +0800</pubDate><description><![CDATA[建立哈希表 mp，以和为键，出现次数为对应的值，记录 pre[i] 出现的次数，从左往右边更新 mp边计算答案，那么以 i 结尾的答案 mp[pre[i]−k]即可在 O(1) 时间内得到。知道 [j,i]子数组的和，就能 O(1)推出 [j−1,i]的和，枚举下标 j 的时候已经能 O(1) 求出 [j,i] 的子数组之和。定义 pre[i]]为 [0..i]里所有数的和，则 pre[i] 可以由 pre[i−1] 递推而来即：pre[i]=pre[i−1]+nums[i]。指的是输入数组的大小。]]></description><category></category></item><item><title><![CDATA[leetCode数据结构基础 day3 | 119.杨辉三角II 48.旋转图像 59.螺旋矩阵II 240.搜索二维矩阵II 435.无重叠区间]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128671082</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128671082</guid><author>m0_62301779</author><pubDate>Sun, 15 Jan 2023 09:50:34 +0800</pubDate><description><![CDATA[如果 matrix[x,y]target，由于每一列的元素都是升序排列的，那么在当前的搜索矩阵中，所有位于第 y列的元素都是严格大于 target的，因此我们可以将它们全部忽略，即将 y减少 1；由于每一次原地交换四个位置，当 n 为偶数时，我们需要枚举 n^2/4=(n/2)×(n/2) 个位置;]]></description><category></category></item><item><title><![CDATA[leetCode数据结构基础 | 感觉最近不在状态QWQ。慢慢来吧。75.颜色分类 705.设计哈希集合 706.设计哈希映射]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128643401</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128643401</guid><author>m0_62301779</author><pubDate>Thu, 12 Jan 2023 10:46:29 +0800</pubDate><description><![CDATA[75.1.可以统计出数组中 0,1,2 的个数，再根据它们的数量，重写整个数组。2.对数组进行两次遍历。指针ptr，在第一次遍历中，我们将数组中所有的 0 交换到数组的头部。在第二次遍历中，我们将数组中所有的 1交换到头部的 0 之后。此时，所有的 2 都出现在数组的尾部。3.对数组进行一次遍历，用指针 p0​ 来交换 0，p1来交换 1，初始值都为 0。如果找到了 1，那么将其与 nums[p1]进行交换，并将 p1 向后移动一个位置，]]></description><category></category></item><item><title><![CDATA[leetCode数据结构基础 day1 | 136.只出现一次的数字 169.多数元素 15.三数之和]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128629989</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128629989</guid><author>m0_62301779</author><pubDate>Wed, 11 Jan 2023 13:16:30 +0800</pubDate><description><![CDATA[依然还是在数组中找到 abc 使得a + b +c =0，这里相当于 a = nums[i] b = nums[left] c = nums[right]。如果nums[i] + nums[left] + nums[right] > 0 就说明 此时三数之和大了，因为数组是排序后了，所以right下标就应该向左移动，这样才能让三数之和小一些。3.异或运算满足交换律和结合律，即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。1.任何数和 0 做异或运算，结果仍然是原来的数，即 a⊕0=a。]]></description><category></category></item><item><title><![CDATA[leetCode数据结构入门day11 | 653.两数之和IV - 输入二叉搜索树 235. 二叉搜索树的最近公共祖先 236. 二叉树的公共祖先]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128627799</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128627799</guid><author>m0_62301779</author><pubDate>Tue, 10 Jan 2023 14:14:39 +0800</pubDate><description><![CDATA[使用两个指针分别指向数组的头尾，当两个指针指向的元素之和小于 kk 时，让左指针右移；当两个指针指向的元素之和大于 kk 时，让右指针左移；当两个指针指向的元素之和等于 kk 时，返回 TrueTrue。最终，当左指针和右指针重合时，树上不存在两个和为 kk 的节点，返回 FalseFalse。235. 二叉搜索树的最近公共祖先。235.二叉树的最近公共祖先。]]></description><category></category></item><item><title><![CDATA[leetCode数据结构入门day 10 | 226.翻转二叉树 112.路径之和 700.二叉搜索树中的搜索 701. 二叉搜索树中的插入操作 98.验证二叉搜索树]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128600577</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128600577</guid><author>m0_62301779</author><pubDate>Tue, 10 Jan 2023 12:31:36 +0800</pubDate><description><![CDATA[如果当前遍历到的节点 root的左右两棵子树都已经翻转，那么我们只需要交换两棵子树的位置，即可完成以 root为根节点的整棵子树的翻转。若 val>root.valval>root.val，递归右子树。（关键，否则会超出时间限制），将这个大问题转化为一个小问题：是否存在从当前节点的子节点到叶子的路径，满足其路径和为。问题关键是，二叉搜索树的插入，总是存在一个不需调整树结构，就能插入新节点的方法。是否有从「根节点」到某个「叶子节点」经过的路径上的节点之和等于目标和。从根节点开始，递归地对树进行遍历，并。]]></description><category></category></item><item><title><![CDATA[leetCode数据结构入门day 9| 144.二叉树的前序遍历 101. 对称二叉树 102. 二叉树的层次遍历 104.二叉树的最大深度]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128590291</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128590291</guid><author>m0_62301779</author><pubDate>Sat, 07 Jan 2023 16:04:49 +0800</pubDate><description><![CDATA[这样直接递归是不行的，因为数组res没有传递。]]></description><category></category></item><item><title><![CDATA[leetCode数据结构入门day8 | 203.逆置链表 83. 删除重复元素 20.有效的括号 232.用栈实现队列]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128575393</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128575393</guid><author>m0_62301779</author><pubDate>Fri, 06 Jan 2023 15:16:12 +0800</pubDate><description><![CDATA[标解的代码好简洁QWQ，注意这里指针的后移不是->next,而是直接将一个指针赋值给另一个指针。需要注意的是 n1的下一个节点必须指向 ∅。如果忽略了这一点，链表中可能会产生环。其关键在于反向工作。假设链表的其余部分已经被反转，现在应该如何反转它前面的部分？想到了双指针，但是在我的认知里面这应该算三指针了吧。"[",  "]" 要进行栈的判空。注意链表开头和结尾的特殊情况。83. 删除重复元素。]]></description><category></category></item><item><title><![CDATA[leetcode数据结构入门day7 | 141.环形链表 21. 合并两个有序链表 203.移除链表元素]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128559589</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128559589</guid><author>m0_62301779</author><pubDate>Thu, 05 Jan 2023 15:22:38 +0800</pubDate><description><![CDATA[141.环形链表访问次数比较，想到用哈希表，但是不知道ListNode*的数据类型能不能用。事实是可以的。]]></description><category></category></item><item><title><![CDATA[leetcode数据结构入门day6 | 387，383，242都是次数比较，用哈希表]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128547191</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128547191</guid><author>m0_62301779</author><pubDate>Wed, 04 Jan 2023 16:55:03 +0800</pubDate><description><![CDATA[387.字符串中的第一个唯一的字符想到了用哈希表，但是不知道该怎么用。序列式容器：STL中的部分容器，如：vector、list、deque等，因为其底层为线性序列的数据结构，里面存储的是元素本身关联式容器：里面存储的是结构的键值对（保存映射关系），在数据检索时比序列式容器效率更高。STL总共实现了两种不同结构的关联式式容器：树型结构与哈希结构。]]></description><category></category></item><item><title><![CDATA[leetcode数据结构入门day5 | 36.有效数独 73. 矩阵置零]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128540675</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128540675</guid><author>m0_62301779</author><pubDate>Wed, 04 Jan 2023 13:30:45 +0800</pubDate><description><![CDATA[36.有效数独可以使用哈希表记录每一行、每一列、每一个小九宫格中，每个数字出现的次数。只需要遍历数独一次，在遍历的过程中更新哈希表中的计数，并判断是否满足有效的数独的条件即可。对于数独的第 i 行第 j 列的单元格，该单元格所在的小九宫格的行数和列数分别为 [i/3]和[j/3]。某个数 x + ’ 0 ’ 就是指将x转变为某个数 x - ’ 0 ’ 就是指将x转变为。]]></description><category></category></item><item><title><![CDATA[Java | text3，4，5]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128513846</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128513846</guid><author>m0_62301779</author><pubDate>Mon, 02 Jan 2023 20:29:00 +0800</pubDate><description><![CDATA[Java 的输出方式一般有这三种:print、println、printf。它们都是 java.long 包里的 System 类中的方法。]]></description><category></category></item><item><title><![CDATA[leetcode数据结构入门day4 I 566.重塑矩阵 181.杨辉三角]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128520266</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128520266</guid><author>m0_62301779</author><pubDate>Mon, 02 Jan 2023 14:45:19 +0800</pubDate><description><![CDATA[操作是可行且合理的，则输出新的重塑矩阵；否则，输出原始矩阵。只有当新旧矩阵容量一致的时候，才能重塑矩阵，否则输出原始矩阵。1.vector数组使用还不是很清晰。3.怎么把旧矩阵填坑进入新矩阵。2.没有理解题目的意思。]]></description><category></category></item><item><title><![CDATA[leetcode数据结构day3 | 350.两个数组的交集 121.买卖股票的最佳时机]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128512250</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128512250</guid><author>m0_62301779</author><pubDate>Sun, 01 Jan 2023 16:46:57 +0800</pubDate><description><![CDATA[只有当每个元素的键不等于容器中已经存在的任何其他元素的键时，才会插入每个元素（unordered_map中的键是唯一的）。在容器中搜索以k为键的元素，如果找到则返回一个迭代器，否则返回一个迭代器到unordered_map::end（容器末尾的元素）。然后遍历第二个数组，对于第二个数组中的每个数字，如果在哈希表中存在这个数字，则将该数字添加到答案，并减少哈希表中该数字出现的次数。每次比较两个指针指向的两个数组中的数字，如果两个数字不相等，则将指向较小数字的指针右移一位。：容器可以容纳的最大元素数量。]]></description><category></category></item><item><title><![CDATA[补充 || 快速排序]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128506603</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128506603</guid><author>m0_62301779</author><pubDate>Sat, 31 Dec 2022 21:15:00 +0800</pubDate><description><![CDATA[因为此处设置的基准数是最左边的数，所以需要让哨兵 j先出动，这一点非常重要。接下来开始哨兵 j 继续向左挪动（再友情提醒，每次必须是哨兵j先出发），哨兵 i 也继续向右挪动的。快速排序是分别从两端开始”探测”的，刚开始的时候让哨兵 i 指向序列的最左边，让哨兵 j 指向序列的最右边。快速排序的每一轮处理其实就是将这一轮的基准数归位，直到所有的数都归位为止，排序就结束了。快速排序其实是冒泡排序的一种改进，冒泡排序每次对相邻的两个数进行比较，这显然是一种比较浪费时间的。现在交换哨兵i和哨兵j所指向的元素的值。]]></description><category></category></item><item><title><![CDATA[leetcode数据结构入门 day2| 1.两数之和 88.合并两个有序数组]]></title><link>https://blog.youkuaiyun.com/m0_62301779/article/details/128504874</link><guid>https://blog.youkuaiyun.com/m0_62301779/article/details/128504874</guid><author>m0_62301779</author><pubDate>Sat, 31 Dec 2022 16:32:59 +0800</pubDate><description><![CDATA[严格来说，在此遍历过程中的任意一个时刻，nums1​ 数组中有( m−p1−1 )个元素被放入 nums1​ 的后半部，nums2数组中有(n−p2−1)个元素被放入 nums1的后半部，而在指针 p1的后面，nums1 数组有 (m+n−p1−1)个位置。因此 p1后面的位置永远足够容纳被插入的元素，不会产生 p1​ 的元素被覆盖的情况。(m+n−p1−1)≥(m−p1−1)+(n−p2−1)等价于p2≥−1永远成立，套用快速排序的时间复杂度即可，平均情况为 O((m+n)log⁡(m+n))。]]></description><category></category></item></channel></rss>