<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_43287713的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_43287713</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_43287713]]></copyright><item><title><![CDATA[编程题-最长公共子序列（中等-二维动态规划（重点））]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/146428159</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/146428159</guid><author>qq_43287713</author><pubDate>Wed, 26 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[1、动态规划方法的实现需要确定两个必要条件，一个是边界条件；另一个是状态转移方程。可以通过迭代或递归的方式实现。当满足if条件语句时，激活状态转移方程。2、关于字符串根据索引值获取字符的操作：at() 与 operator[] 比较：operator[] 不进行越界检查。如果索引越界，会导致程序崩溃或未定义行为。at() 会进行越界检查，如果访问的索引无效，它会抛出一个 std::out_of_range 异常。]]></description><category></category></item><item><title><![CDATA[编程题-零钱兑换II（中等-动态规划（重点））]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/146420881</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/146420881</guid><author>qq_43287713</author><pubDate>Tue, 25 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[笔者小记：1、动态规划思想可极大降低时间复杂度，需特别关注。2、“||”与“|”运算符号的区别：仅仅是函数调用时的区别，数值上并没有区别。

||（逻辑或）运算符有短路行为，即如果左边的操作数为 true，右边的操作数就不会被计算，因为结果已经确定为 true。这是为了优化性能。|（按位或）运算符没有短路行为，无论左边和右边的操作数是什么，都会计算左右两边的每个操作数。]]></description><category></category></item><item><title><![CDATA[编程题-爱吃香蕉的珂珂（中等-二分查找优化的应用）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/146409392</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/146409392</guid><author>qq_43287713</author><pubDate>Mon, 24 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[笔者小记：
1、二分查找的优化应用：二分查找是一种非常高效的查找算法，通常用于在 有序 数组或区间中查找某个特定值或满足某个条件的值。二分查找的时间复杂度为 O(log n)，相比于顺序查找的 O(n)。因此，可以将原本解法一中时间复杂度为O(n^2)的问题降低为时间复杂度为O(n*logn)的问题。

2、在本题中，由于查找的某个特定值在有序数组或区间中，与问题的目标数值存在单调关系（可以通过目标值结果反馈给二分查找下一次迭代取值方向）。因此，可以通过二分查找对for循环依次遍历得到结果的过程进行优化。]]></description><category></category></item><item><title><![CDATA[编程题-网络延迟时间（中等-最优化算法）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/146315095</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/146315095</guid><author>qq_43287713</author><pubDate>Fri, 21 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[笔者小记：1、DijKstra算法；2、堆的数据结构；3、max_element()函数。4、pair<int,int>类型]]></description><category></category></item><item><title><![CDATA[编程题-课程表（中等-重点）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/145966530</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/145966530</guid><author>qq_43287713</author><pubDate>Thu, 20 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[笔者小记：1、拓扑排序原理及应用；2、拓扑排序实现通过深度优先搜索结合栈的数据结构实现，或者广度优先搜索结合队列数据结构实现。]]></description><category></category></item><item><title><![CDATA[编程题-任务调度器（中等-最优化算法）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/146314930</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/146314930</guid><author>qq_43287713</author><pubDate>Wed, 19 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[笔者小记：1、通过使用合适的数据结构，记录并更新过程中关键信息【元素】，实现较低时间复杂度算法的实现。（优化点：不需要不断增加1，模拟一个时间片，通过构建数据结构记录最小冷却执行时间，将哪些在times一次都遍历执行任务的过程跳过，降低时间复杂度）；2、task.size()为需要执行的所有任务的总次数，不需要保证数组为空时终止（每次执行时，剩余执行数量为0的数组进行删除）。通过best遍历所有任务的剩余未执行任务最多的是哪个任务的时间复杂度为O(n），可以避免排序操作时间复杂度为O(nlog(n))。]]></description><category></category></item><item><title><![CDATA[编程题-每日温度（中等）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/146309677</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/146309677</guid><author>qq_43287713</author><pubDate>Mon, 17 Mar 2025 14:18:47 +0800</pubDate><description><![CDATA[笔者小记：1、题目提示信息的利用（常数项的for循环可降低时间复杂度）：利用题目给定的一些提示信息，可以创建常数量的数组（数据结构），减少时间复杂度O(n^2)的产生。2、单调栈的利用：单调栈是一种特殊的栈，通常用于解决一些涉及序列元素比较的问题，如寻找下一个更大或者更小的元素。它具有一个特殊的性质：栈中的元素保持单调顺序。单调栈可以是单调递增栈或单调递减栈。单调栈在许多常见的算法题中非常有用，尤其是处理与数组或序列相关的问题时，通过利用栈的特点可以有效地优化时间复杂度。]]></description><category></category></item><item><title><![CDATA[编程题-最长重复子数组（中等）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/146307488</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/146307488</guid><author>qq_43287713</author><pubDate>Mon, 17 Mar 2025 10:32:38 +0800</pubDate><description><![CDATA[笔者小记：1、暴力枚举方法的时间复杂度为O(n^3)过长，可以通过使用动态规划思想或滑动窗口思想并结合合适的数组结构，以降低代码的时间复杂度，目的是尽可能减少数组元素的重复遍历访问情况。]]></description><category></category></item><item><title><![CDATA[编程题-第k个语法符号（中等）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/146302500</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/146302500</guid><author>qq_43287713</author><pubDate>Sun, 16 Mar 2025 23:20:33 +0800</pubDate><description><![CDATA[笔者小记：1、“与&”运算性质；2、“异或^”运算性质；3、递归函数实现考虑的要素。]]></description><category></category></item><item><title><![CDATA[编程题-马戏团人塔（中等-重点）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/146226271</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/146226271</guid><author>qq_43287713</author><pubDate>Fri, 14 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[笔者小记: 1、sort()函数自定义排序；std::lower_bound用于在有序序列中查找第一个大于等于目标值的元素的位置。]]></description><category></category></item><item><title><![CDATA[编程题-找到字符串中所有字母异位词（中等）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/146223491</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/146223491</guid><author>qq_43287713</author><pubDate>Thu, 13 Mar 2025 11:19:23 +0800</pubDate><description><![CDATA[笔者小记：1、滑动窗口思想及其优势：滑动窗口是一种常用于处理数组或序列类问题的算法思想。它的核心思想是利用两个指针（通常是左指针和右指针）来维护一个窗口范围，并随着窗口的滑动来更新答案。滑动窗口能够在很多场景下优化时间复杂度，尤其是对于需要遍历和比较多个子数组或子序列的问题；减少冗余计算：避免了重复遍历数组或子数组的情况，减少了不必要的计算量，通常能够将时间复杂度从O (n^2)降到 O(n)。2、数组和哈希表计数的方式：可以通过将哈希表和数组计数的方式，可以通过直接判断是否相等。]]></description><category></category></item><item><title><![CDATA[编程题-计算器（中等）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/146139535</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/146139535</guid><author>qq_43287713</author><pubDate>Sun, 09 Mar 2025 22:58:05 +0800</pubDate><description><![CDATA[​
笔者小记：

1、isdigit()函数表示判断是否是阿拉伯数字0~9，若是返回true，否则返回false。2、accumulate(stk.begin(), stk.end(), 0)函数表示用来对指定范围内元素求和。3、switch{}函数中关键词break是为了通常会在每个 case 块的末尾使用 break 语句来避免“穿透”（fall-through）问题。]]></description><category></category></item><item><title><![CDATA[编程题-去除重复字母（中等）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/145964240</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/145964240</guid><author>qq_43287713</author><pubDate>Mon, 03 Mar 2025 08:00:00 +0800</pubDate><description><![CDATA[笔者小记：1、提示中s均为26个小写英文字符，则可以定义vector<int>数组用于计数和判断在某一（另一个数据结构）中存储出现情况。2、相比利用哈希表，利用单调栈(string类型的)和vector<int>（技术和判断是否出现情况）可以更好的实现低时间复杂度的一次遍历情况。]]></description><category></category></item><item><title><![CDATA[编程题-打家劫舍 II（中等-重点）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/145962224</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/145962224</guid><author>qq_43287713</author><pubDate>Sun, 02 Mar 2025 13:59:25 +0800</pubDate><description><![CDATA[笔者小记;在利用动态规划算法进行解题时，第一要考虑动态转移方程(状态转移方程：找出 dp[i] 和 dp[i-1]、dp[i-2] 等之间的关系)，第二要考虑边界条件(即指的是在递归或迭代过程中，不需要再拆分的问题，即可以直接得到结果的情况。边界条件的设置对于正确构建 DP 递推公式至关重要，边界条件是初始化 DP 数组：为后续状态转移提供基础。提供直接解：有些问题在初始状态下答案已知，无需进一步计算）。除此之外，动态规划/贪心算法思想一般都会先分成两类，并取两个最后大规模问题最优解之间的最大值，作为最终解]]></description><category></category></item><item><title><![CDATA[编程题-最大数（中等）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/145910093</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/145910093</guid><author>qq_43287713</author><pubDate>Fri, 28 Feb 2025 08:00:00 +0800</pubDate><description><![CDATA[笔者小记：1、字符串比较，在C++中，std::string 类型的字符串可以通过直接使用比较运算符进行大小比较。比较是基于字典顺序（即按字符的 ASCII 或 Unicode 值逐一比较）进行的
2、关于sort()排序函数的高阶使用。]]></description><category></category></item><item><title><![CDATA[编程题-LRU缓存（中等）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/145865282</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/145865282</guid><author>qq_43287713</author><pubDate>Wed, 26 Feb 2025 08:00:00 +0800</pubDate><description><![CDATA[笔者小记：1、在C++中，当需要使用有先后顺序的哈希表时（即有序哈希表），可以采用哈希表+双向链表的方式实现，原本C++中并不支持有序哈希表的数据结构。2、将一个节点移动到双向链表的头部，可以分成【删除该节点】和【在双向链表的头部添加节点】两部操作，都可以在O(1)时间内完成。3、在双向链表的实现中，使用一个伪头部和伪尾部标记界线，这样在添加节点和删除节点的时候就不需要检查相邻的节点是否存在。]]></description><category></category></item><item><title><![CDATA[编程题-从前序与中序遍历序列构造二叉树（中等-重点）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/145836974</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/145836974</guid><author>qq_43287713</author><pubDate>Mon, 24 Feb 2025 22:11:09 +0800</pubDate><description><![CDATA[笔者小记：1、掌握二叉树前序遍历和中序遍历的过程；2、掌握二叉树构建时，通过递归和迭代的方式添加二叉树新节点的代码书写思路。]]></description><category></category></item><item><title><![CDATA[编程题-连接两字母单词得到的最长回文串（中等）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/145817064</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/145817064</guid><author>qq_43287713</author><pubDate>Sun, 23 Feb 2025 22:39:56 +0800</pubDate><description><![CDATA[笔者小记：

在遍历哈希表中的每个单词时，为了避免重复计算成对选择的单词，我们可以设置访问标记符，哈希表初始访问符设置为0，在后续遍历中将已访问的哈希表元素的标记符修改为1，添加if条件语句仅遍历标记符为0的哈希表元素，可减少时间复杂度，避免重复访问成对选择的哈希表元素。]]></description><category></category></item><item><title><![CDATA[编程题-颜色分类（中等）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/145690980</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/145690980</guid><author>qq_43287713</author><pubDate>Mon, 17 Feb 2025 21:34:24 +0800</pubDate><description><![CDATA[笔者小记：1、采用指针思路时，指针可以作为满足特定条件后再移动，而不需要每次循环遍历就需要移动，即for循环遍历是，int i是与p0、p1或p2独立分开的。p0、p1或p2只是记录元素【头部】的一个标记点。]]></description><category></category></item><item><title><![CDATA[编程题-合并区间（中等-重点）]]></title><link>https://blog.youkuaiyun.com/qq_43287713/article/details/145671159</link><guid>https://blog.youkuaiyun.com/qq_43287713/article/details/145671159</guid><author>qq_43287713</author><pubDate>Sun, 16 Feb 2025 23:32:25 +0800</pubDate><description><![CDATA[笔者小记：
1、对于vector<vector<int>>& intervals，函数sort(intervals.begin(), intervals.end());表示利用intervals内层的第一个元素的大小对intervals外层元素进行排序。]]></description><category></category></item></channel></rss>