摘要:
队列的基本应用 - 广度优先遍历 1)树 : 层序遍历; 2)图:无权图的最短路径。 使用队列来实现二叉树的层序遍历,需要多关注一个层数的信息 解法二:<推荐> 比解法一通用,更方便。 之形的意思是:第0行是从左到右遍历,第1行是从右到左遍历,以此类推,交叉往返的之字形的层序遍历。 这里需要注意的一 阅读全文
摘要:
前序遍历:根左右 中序遍历:左根右 后序遍历:左右根 可以使其遍历顺序为根左右,然后逆序插入vector中,即每次在vector的头部插入结点值。在压入栈时先压入右结点再压入左结点则在出栈时就是先左后右了。 解法二:关键是判断当前这个结点: 1)它如果有左右结点是否已经入栈,若没有入栈则先将它的右结 阅读全文
摘要:
注意:!!当字符串的某一字符为 )} ] 时要先判断栈st是否为空,若为空则返回false,否则st.pop()时容易造成指针溢出报错。 思路:从前往后遍历数组,遇到数字则压入栈中,遇到符号则把栈顶的两个数字拿出来做运算,把结果再压入栈中,直到遍历完整个数组,栈顶数字就是答案。 .. 回退一个目录 阅读全文
摘要:
当我用windows电脑 pip install missingno 时 它居然会报pip不是内部或外部命令也不是可运行的程序或批处理文件的问题! 解决方法: 1)找到 pip.exe 所在位置,一般安装过Anaconda之后都会有这个文件,即已经安装过pip了,出现上面的问题是因为未在环境变量中添 阅读全文
摘要:
最优子结构:通过求子问题的最优解,可以获得原问题的最优解。 解法一:记忆化搜索 解法二:动态规划 思路:如下图所示,红色部分表示平方数,所有的完美平方数都可以看做一个普通数加上一个完美平方数,那么递推式就变为了:dp[i + j * j] = min(dp[i] + 1, dp[i + j * j] 阅读全文
摘要:
1. 记忆化搜索 - 自上向下的解决问题:使用vector来保存每次计算的结果,如果下次再碰到同样的需要计算的式子就不需要重复计算了。 2. 动态规划 - 自下向上的解决问题 解法一:自顶向下 解法二:自底向上 注意:从2只能移动到3和4;从3只能移动到6和5. 思路:设从位置(i,j)达到底部的最 阅读全文
摘要:
本题是从1开始计数;n一定是合法的。 能否只遍历一遍链表? n = 2, 则要删除4和5。使用两个指针来寻找要删除的区间。 思路:快慢指针,一开始让fast和slow指向链表的头结点,然后让fast指向链表旋转k位后的头结点,然后fast和slow同时向后移动,直到fast指向原链表的最后一个元素, 阅读全文
摘要:
该逻辑对于删除第一个元素不适用。 这样的代码不优美 可以设置一个虚拟的头结点: 这道题想了好久,原因是要把重复的所有元素都删除,这里设立一个duplicate标志位来记录当前cur是否与下一个结点重复。 又重新做了一遍这道题,思路和前面设置标志位记录重复的不太一样。重点在于在两个结点不相同时,需要判 阅读全文
摘要:
表不支持随机查找,通常是使用next指针进行操作。 206. 反转链表 需要考虑以上两个问题,在本题中已经假定1 <= m <= n <= length of list 思路: 完整的翻转链表程序: 思路:在链表中,可以通过创建两个新的头结点指针,来分别指向小于x的结点和大于等于x的结点,遍历结束之 阅读全文
摘要:
思路:滑动窗口(长度为k+1)看这个窗口里的是否有两个元素的值相同。加查找表。 注意:是数组中有重复的元素返回true,没有返回false。 用set运行的更快。 函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小 阅读全文