<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bili_orange的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/bili_orange</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bili_orange]]></copyright><item><title><![CDATA[C++学习笔记-贪心算法]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/131220767</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/131220767</guid><author>bili_orange</author><pubDate>Tue, 27 Jun 2023 09:41:47 +0800</pubDate><description><![CDATA[就是摆动序列里元素的个数。]]></description><category></category></item><item><title><![CDATA[C++学习笔记-回溯算法(2)]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/131100610</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/131100610</guid><author>bili_orange</author><pubDate>Thu, 15 Jun 2023 09:18:49 +0800</pubDate><description><![CDATA[到现在为止，已经学习了回溯算法的组合、分割、子集、排列问题。组合、分割、子集问题中，组合都是无序的，[1,2]和[2,1]是相同的结果，所以前面取过1之后，后面就不能再取1了，那么就需要startIndex（不全是这样，如果是从不同的集合中取元素、相互之间不影响的话，也不需要）。但排列问题中[1,2]和[2,1]是不同的结果，所以前面取过1之后，后面可以再取，就不需要startIndex了。但是因为要避免同一树枝上把相同的元素取两遍，所以需要used数组来标明哪些元素已经用过了。去重。]]></description><category></category></item><item><title><![CDATA[C++学习笔记-回溯算法（1）组合问题]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/130989003</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/130989003</guid><author>bili_orange</author><pubDate>Thu, 08 Jun 2023 09:14:55 +0800</pubDate><description><![CDATA[如果used[i-1]= 0(false)，说明在这一树枝上没有用到candidates[i-1]，那么就是在candidates[i]相同层的前一个元素出现了相同的，used[i-1]= 0是因为是从前一个树枝回溯到这的，所以就是树层重复了，那么candidates[i]就不能再被选取了。本题中，需要用到的参数是给定的两个整数n和k，还有用来防止把同一个元素取了两次的startIndex，保证下一层的递归从上一层递归已经用过的元素后面的元素开始。，这部分必不符合要求，就不用再递归了。]]></description><category></category></item><item><title><![CDATA[C++学习笔记-二叉树（4）]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/130778377</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/130778377</guid><author>bili_orange</author><pubDate>Wed, 31 May 2023 21:00:30 +0800</pubDate><description><![CDATA[2.要删除的节点是叶子节点，左右孩子均为空，直接删除即可，然后返回NULL给上一层，因为要删除的本身就是叶子节点，删了之后上一层就变成新的叶子节点，所以用root->left或root->right接收NULL是正确的；5.要删除的节点左右孩子均不为空，可以把左子树并到右子树上，也可以把右子树并到左子树上，是一样的，选一种即可。具体方法是使用两个指针，比较前后元素是否相同（根据题目中给出的性质，相同的元素一定是相邻的），如果相同，就count+1，不同的话count=1。那就不设置最大值了，]]></description><category></category></item><item><title><![CDATA[C++学习笔记—二叉树（3）]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/130648951</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/130648951</guid><author>bili_orange</author><pubDate>Sat, 20 May 2023 10:04:39 +0800</pubDate><description><![CDATA[数值即可。从左向右遍历，每一层的第一个节点必是该层的最左节点。如何实现“最后一层”？每迭代一层，结果更新一次，最后返回的就是最后一层。]]></description><category></category></item><item><title><![CDATA[C++学习笔记-二叉树（2）]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/130567347</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/130567347</guid><author>bili_orange</author><pubDate>Fri, 12 May 2023 17:31:21 +0800</pubDate><description><![CDATA[函数参数除了接收传入的节点之外，还需要一个vector<int>类型的数组来存放路径的节点（用vector是因为回溯的时候比较方便），还需要一个vector<string>类型的数组来存放符合要求的带->的最终结果。因为是从下往上遍历，中间节点的高度需要参考左右孩子的高度，所以是先求左右孩子高度，再向上返回结果计算中间节点的高度。因为代码的逻辑实际上是求根节点的高度，根节点的高度就是二叉树的最大深度，所以用的是求高度的后序遍历。，因为要通过左右孩子（即内侧和外侧节点）的比较结果，来判断这两棵子树是否对称。]]></description><category></category></item><item><title><![CDATA[C++学习笔记-二叉树（1）]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/130329559</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/130329559</guid><author>bili_orange</author><pubDate>Mon, 08 May 2023 17:22:36 +0800</pubDate><description><![CDATA[递归的过程中，如何算是递归结束了呢，当然是当前遍历的节点是空了，那么本层递归就要结束了，所以如果当前遍历的这个节点是空，就直接return。跟最大深度不同的是，最大深度要把所有层都遍历完才能得出结果，而在最小深度，只要检测到某个节点的左右孩子都为空（即叶子结点），直接返回深度。前序是先将中间的节点交换，注意交换的时候会带着各自的孩子节点一起交换，然后再以同样的逻辑处理左子树，最后再以同样的逻辑处理右子树。前序遍历是中左右的循序，所以在单层递归的逻辑，是要先取中节点的数值，中序和后序同理。]]></description><category></category></item><item><title><![CDATA[C++容器]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/130351495</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/130351495</guid><author>bili_orange</author><pubDate>Mon, 24 Apr 2023 21:07:00 +0800</pubDate><description><![CDATA[(set(集合容器)/multliset(多重集合容器)),(map(映射容器)/multimap(多重映射容器))(stack(栈)/queue(队列)/priority_queue(优先级队列))可以从末尾快速地插入与删除元素,快速的随机访问元素。但vector，删除之前需要用empty判断是否为空。]]></description><category></category></item><item><title><![CDATA[C++学习笔记-栈和队列]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/130160995</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/130160995</guid><author>bili_orange</author><pubDate>Sun, 23 Apr 2023 20:14:29 +0800</pubDate><description><![CDATA[四个问题：1.C++中stack和queue是容器吗？不是，它们是。]]></description><category></category></item><item><title><![CDATA[C++学习笔记-字符串]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/130068982</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/130068982</guid><author>bili_orange</author><pubDate>Fri, 14 Apr 2023 19:57:11 +0800</pubDate><description><![CDATA[如果前一个字符的前缀表的数值是i，就把模式串下标移动到下标i的位置继续比较。判断字符串s是否由重复子串组成，只要两个s拼接在一起，里面还出现一个s的话，就说明是由重复子串组成。前缀表的任务是当前位置匹配失败，找到之前已经匹配上的位置，再重新匹配，此也意味着在某个字符失配时，3.然后利用双指针法，一个从新的数组末尾开始，一个从旧的数组末尾开始，从后向前替换空格。思路：双指针，一个从数组开头往后走，一个从数组结尾往前走，挨个互换元素即可。，这样避免在s+s中搜索出原来的s，我们要搜索的是中间拼接出来的s。]]></description><category></category></item><item><title><![CDATA[C++学习笔记-哈希表]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/129975808</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/129975808</guid><author>bili_orange</author><pubDate>Mon, 10 Apr 2023 20:00:35 +0800</pubDate><description><![CDATA[std::set和std::multiset底层实现都是红黑树，std::unordered_set的底层实现是哈希表， 使用unordered_set 读写效率是最高的，并不需要对数据进行排序，而且还不要让数据重复，所以选择unordered_set。如果nums[i]+nums[left]+nums[right]]]></description><category></category></item><item><title><![CDATA[C++链表部分]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/129865154</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/129865154</guid><author>bili_orange</author><pubDate>Wed, 05 Apr 2023 19:42:55 +0800</pubDate><description><![CDATA[链表是一种通过指针串联在一起的线性结构，每一个节点由两部分组成，一个是数据域一个是指针域（存放指向下一个节点的指针），最后一个节点的指针域指向null（空指针的意思）。重新定义两个指针，一个指针从头节点出发，一个从相遇的节点出发，各走一步，下一次相遇的地方就是环的入口节点。双链表有两个指针域，一个指向下一个节点，一个指向上一个节点。链表的长度可以是不固定的，并且可以动态增删， 适合数据量不固定，频繁增删，较少查询的场景。数组在定义的时候，长度就是固定的，如果想改动数组的长度，就需要重新定义一个新的数组。]]></description><category></category></item><item><title><![CDATA[c++数组部分]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/129757118</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/129757118</guid><author>bili_orange</author><pubDate>Fri, 31 Mar 2023 19:58:26 +0800</pubDate><description><![CDATA[数组可以方便的通过的方式获取到下标下对应的数据。数组内存空间的地址是连续的。数组元素不能删除，只能覆盖。C++中，二维数组在内存的空间地址是连续的。]]></description><category></category></item><item><title><![CDATA[时间复杂度]]></title><link>https://blog.youkuaiyun.com/bili_orange/article/details/129763185</link><guid>https://blog.youkuaiyun.com/bili_orange/article/details/129763185</guid><author>bili_orange</author><pubDate>Sat, 25 Mar 2023 16:47:50 +0800</pubDate><description><![CDATA[O(1)常数阶 < O(logn)对数阶 < O(n)线性阶 < O(nlogn)线性对数阶 < O(n^2)平方阶 < O(n^3)立方阶 < O(2^n)指数阶。（2）冒泡排序：假设有N个量，最好情况是执行N次，最坏情况是执行(N*(N+1))/2次，则时间复杂度为O((N*(N+1))/2)=O(N*2).（1）二分法查找：假设有N个量，最好情况是一次就找到，最坏情况是算法执行了log(2)N次，则时间复杂度为O(log(2)N)=O(logN)但数据用例不一样时，时间复杂度也是不同的。]]></description><category></category></item></channel></rss>