<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[by_qmr的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/by_qmr</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; by_qmr]]></copyright><item><title><![CDATA[[LeetCode] Course Schedule]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/87460409</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/87460409</guid><author>by_qmr</author><pubDate>Sat, 16 Feb 2019 17:40:09 +0800</pubDate><description><![CDATA[现在你总共有 n 门课需要选，记为 0 到 n-1。
在选修某些课程之前需要一些先修课程。 例如，想要学习课程 0 ，你需要先完成课程 1 ，我们用一个匹配来表示他们: [0,1]
给定课程总量以及它们的先决条件，判断是否可能完成所有课程的学习？
示例 1:
输入: 2, [[1,0]]
输出: true
解释: 总共有 2 门课程。学习课程 1 之前，你需要完成课程 0。所以这是可能的。
示例 ...]]></description><category></category></item><item><title><![CDATA[[LeetCode] Dungeon Game]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/86926706</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/86926706</guid><author>by_qmr</author><pubDate>Sun, 10 Feb 2019 20:01:11 +0800</pubDate><description><![CDATA[一些恶魔抓住了公主（P）并将她关在了地下城的右下角。地下城是由 M x N 个房间组成的二维网格。我们英勇的骑士（K）最初被安置在左上角的房间里，他必须穿过地下城并通过对抗恶魔来拯救公主。
骑士的初始健康点数为一个正整数。如果他的健康点数在某一时刻降至 0 或以下，他会立即死亡。
有些房间由恶魔守卫，因此骑士在进入这些房间时会失去健康点数（若房间里的值为负整数，则表示骑士将损失健康点数）；其他房间...]]></description><category></category></item><item><title><![CDATA[[LeetCode] Maximum Product Subarray]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/86763871</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/86763871</guid><author>by_qmr</author><pubDate>Mon, 04 Feb 2019 18:03:04 +0800</pubDate><description><![CDATA[给定一个整数数组 nums ，找出一个序列中乘积最大的连续子序列（该序列至少包含一个数）。
示例 1:
输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
引用自 https://blog.youkuaiyun.com/whuwangyi/article/details/39577455
使用DP，由于负数的存在，需要同时保存当前最大值和当前最小值，所以需要维护两个DP表，...]]></description><category></category></item><item><title><![CDATA[[LeetCode] Binary Tree Postorder Traversal]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/86744750</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/86744750</guid><author>by_qmr</author><pubDate>Fri, 01 Feb 2019 20:54:52 +0800</pubDate><description><![CDATA[给定一个二叉树，返回它的 后序 遍历。
示例:
输入: [1,null,2,3]
1

2
/
3
输出: [3,2,1]
引用自Code ganker：http://blog.youkuaiyun.com/linhuanmars/article/details/22009351
“接下来是迭代的做法，本质就是用一个栈来模拟递归的过程，但是相比于Binary Tree Inorder Traversal和Bi...]]></description><category></category></item><item><title><![CDATA[[LeetCode] Reorder List]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/86743180</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/86743180</guid><author>by_qmr</author><pubDate>Fri, 01 Feb 2019 17:26:39 +0800</pubDate><description><![CDATA[给定一个单链表 L：L0→L1→…→Ln-1→Ln ，
将其重新排列后变为： L0→Ln→L1→Ln-1→L2→Ln-2→…
你不能只是单纯的改变节点内部的值，而是需要实际的进行节点交换。
示例 1:
给定链表 1-&amp;gt;2-&amp;gt;3-&amp;gt;4, 重新排列为 1-&amp;gt;4-&amp;gt;2-&amp;gt;3.
这道链表重排序问题可以拆分为以下三个小问题：


使用快慢指针来找到链表的中点，并将链表从中...]]></description><category></category></item><item><title><![CDATA[[LeetCode] Linked List Cycle II]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/86728838</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/86728838</guid><author>by_qmr</author><pubDate>Thu, 31 Jan 2019 23:29:30 +0800</pubDate><description><![CDATA[给定一个链表，返回链表开始入环的第一个节点。 如果链表无环，则返回 null。
为了表示给定链表中的环，我们使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。 如果 pos 是 -1，则在该链表中没有环。
说明：不允许修改给定的链表。
示例 1：
输入：head = [3,2,0,-4], pos = 1
输出：tail connects to node index 1
解释：...]]></description><category></category></item><item><title><![CDATA[[LeetCode] Word Break II]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/86709823</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/86709823</guid><author>by_qmr</author><pubDate>Wed, 30 Jan 2019 23:12:44 +0800</pubDate><description><![CDATA[给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict，在字符串中增加空格来构建一个句子，使得句子中所有的单词都在词典中。返回所有这些可能的句子。
说明：
分隔时可以重复使用字典中的单词。
你可以假设字典中没有重复的单词。
示例 1：
输入:
s = “pineapplepenapple”
wordDict = [“apple”, “pen”, “applepen”, “pine”...]]></description><category></category></item><item><title><![CDATA[[LeetCode] Word Break]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/86709765</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/86709765</guid><author>by_qmr</author><pubDate>Wed, 30 Jan 2019 23:03:08 +0800</pubDate><description><![CDATA[给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict，判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
说明：
拆分时可以重复使用字典中的单词。
你可以假设字典中没有重复的单词。
示例 1：
输入: s = “leetcode”, wordDict = [“leet”, “code”]
输出: true
碰到字符串分解问题，容易想到用递归做，但很容易超时，考虑使用dp...]]></description><category></category></item><item><title><![CDATA[[LeetCode] Longest Consecutive Sequence]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/86607198</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/86607198</guid><author>by_qmr</author><pubDate>Wed, 23 Jan 2019 11:28:07 +0800</pubDate><description><![CDATA[给定一个未排序的整数数组，找出最长连续序列的长度。
要求算法的时间复杂度为 O(n)。
示例:
输入: [100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。
class Solution {
    public int longestConsecutive(int[] nums) {
        HashSet&amp;lt;I...]]></description><category></category></item><item><title><![CDATA[[LeetCode] Best Time to Buy and Sell Stock III]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/84995997</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/84995997</guid><author>by_qmr</author><pubDate>Thu, 13 Dec 2018 22:21:28 +0800</pubDate><description><![CDATA[问题描述：
给定一个数组，它的第 i 个元素是一支给定的股票在第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。
注意: 你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。
示例 1:
输入: [3,3,5,0,0,3,1,4]
输出: 6
解释: 在第 4 天（股票价格 = 0）的时候买入，在第 6 天（股票价格 = 3）的时候卖出，这笔交易所能...]]></description><category></category></item><item><title><![CDATA[[LeetCode] Best Time to Buy and Sell Stock |]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/84995882</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/84995882</guid><author>by_qmr</author><pubDate>Thu, 13 Dec 2018 22:10:12 +0800</pubDate><description><![CDATA[问题描述：
给定一个数组，它的第 i 个元素是一支给定股票第 i 天的价格。
如果你最多只允许完成一笔交易（即买入和卖出一支股票），设计一个算法来计算你所能获取的最大利润。
注意你不能在买入股票前卖出股票。
示例 1:
输入: [7,1,5,3,6,4]
输出: 5
解释: 在第 2 天（股票价格 = 1）的时候买入，在第 5 天（股票价格 = 6）的时候卖出，最大利润 = 6-1 = 5 。
注...]]></description><category></category></item><item><title><![CDATA[[LeetCode]Validate Binary Search Tree]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/83414675</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/83414675</guid><author>by_qmr</author><pubDate>Fri, 26 Oct 2018 14:36:11 +0800</pubDate><description><![CDATA[给定一个二叉树，判断其是否是一个有效的二叉搜索树。
假设一个二叉搜索树具有如下特征：
节点的左子树只包含小于当前节点的数。
节点的右子树只包含大于当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。
示例 1:

此题要求判断一个二叉搜索树是否有效，如果采用由底向上的递归是不行的，因为需要关注的是节点的整个左子树或右子树，比如：[10,5,15,null,null,6,20]，必须由上向下进...]]></description><category></category></item><item><title><![CDATA[[LeetCode]Recover Binary Search Tree]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/83414325</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/83414325</guid><author>by_qmr</author><pubDate>Fri, 26 Oct 2018 14:18:54 +0800</pubDate><description><![CDATA[二叉搜索树中的两个节点被错误地交换。
请在不改变其结构的情况下，恢复这棵树。
示例 1:
输入: [1,3,null,null,2]
示例 2:
输入: [3,1,4,null,null,2]

使用 O(n) 空间复杂度的解法很容易实现,代码如下
class Solution {
    public void recoverTree(TreeNode root) {
        List&amp;...]]></description><category></category></item><item><title><![CDATA[[LeetCode]Unique Binary Search Trees II]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/83348703</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/83348703</guid><author>by_qmr</author><pubDate>Wed, 24 Oct 2018 18:46:21 +0800</pubDate><description><![CDATA[给定一个整数 n，生成所有由 1 … n 为节点所组成的二叉搜索树。
示例:
输入: 3
输出:
[
[1,null,3,2],
[3,2,null,1],
[3,1,null,null,2],
[2,1,3],
[1,null,2,null,3]
]
解释:
以上的输出对应以下 5 种不同结构的二叉搜索树：

使用自底向上的方式进行构建，且分成左右子树分别构建，注意当min &amp;gt; max时，...]]></description><category></category></item><item><title><![CDATA[[LeetCode]Gray Code]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/83069157</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/83069157</guid><author>by_qmr</author><pubDate>Tue, 16 Oct 2018 10:29:14 +0800</pubDate><description><![CDATA[格雷编码是一个二进制数字系统，在该系统中，两个连续的数值仅有一个位数的差异。
给定一个代表编码总位数的非负整数 n，打印其格雷编码序列。格雷编码序列必须以 0 开头。
示例 1:
输入: 2
输出: [0,1,3,2]
解释:
00 - 0
01 - 1
11 - 3
10 - 2
对于给定的 n，其格雷编码序列并不唯一。
例如，[0,2,3,1] 也是一个有效的格雷编码序列。
00 - 0
10...]]></description><category></category></item><item><title><![CDATA[[LeetCode]Partition List]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/83051542</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/83051542</guid><author>by_qmr</author><pubDate>Sun, 14 Oct 2018 22:00:53 +0800</pubDate><description><![CDATA[给定一个链表和一个特定值 x，对链表进行分隔，使得所有小于 x 的节点都在大于或等于 x 的节点之前。
你应当保留两个分区中每个节点的初始相对位置。
示例:
输入: head = 1-&amp;gt;4-&amp;gt;3-&amp;gt;2-&amp;gt;5-&amp;gt;2, x = 3
输出: 1-&amp;gt;2-&amp;gt;2-&amp;gt;4-&amp;gt;3-&amp;gt;5
题目含义是把一个链表分成两块，一块小于所给的数，一块大于，且每个块间的...]]></description><category></category></item><item><title><![CDATA[[LeetCode]Largest Rectangle in Histogram 直方图中最大的矩形]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/83032715</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/83032715</guid><author>by_qmr</author><pubDate>Fri, 12 Oct 2018 21:00:02 +0800</pubDate><description><![CDATA[Given n non-negative integers representing the histogram’s bar height where the width of each bar is 1, find the area of largest rectangle in the histogram.

Above is a histogram where width of each b...]]></description><category></category></item><item><title><![CDATA[[LeetCode]Remove Duplicates from Sorted List II 移除有序链表中的重复项之二]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/83020700</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/83020700</guid><author>by_qmr</author><pubDate>Thu, 11 Oct 2018 23:47:07 +0800</pubDate><description><![CDATA[给定一个排序链表，删除所有含有重复数字的节点，只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1-&amp;amp;gt;2-&amp;amp;gt;3-&amp;amp;gt;3-&amp;amp;gt;4-&amp;amp;gt;4-&amp;amp;gt;5
输出: 1-&amp;amp;gt;2-&amp;amp;gt;5
示例 2:
输入: 1-&amp;amp;gt;1-&amp;amp;gt;1-&amp;amp;gt;2-&amp;amp;gt;3
输出: 2-&a]]></description><category></category></item><item><title><![CDATA[[LeetCode]Search in Rotated Sorted ArrayI＆II]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/83005264</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/83005264</guid><author>by_qmr</author><pubDate>Wed, 10 Oct 2018 23:52:52 +0800</pubDate><description><![CDATA[假设按照升序排序的数组在预先未知的某个点上进行了旋转。
( 例如，数组 [0,0,1,2,2,5,6] 可能变为 [2,5,6,0,0,1,2] )。
编写一个函数来判断给定的目标值是否存在于数组中。若存在返回 true，否则返回 false。
示例 1:
输入: nums = [2,5,6,0,0,1,2], target = 0
输出: true
示例 2:
输入: nums = [2,5,6...]]></description><category></category></item><item><title><![CDATA[[LeetCode]Remove Duplicates from Sorted Array II]]></title><link>https://blog.youkuaiyun.com/by_qmr/article/details/82890176</link><guid>https://blog.youkuaiyun.com/by_qmr/article/details/82890176</guid><author>by_qmr</author><pubDate>Fri, 28 Sep 2018 21:15:35 +0800</pubDate><description><![CDATA[问题描述：
给定一个排序数组，你需要在原地删除重复出现的元素，使得每个元素最多出现两次，返回移除后数组的新长度。
不要使用额外的数组空间，你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
示例 1:
给定 nums = [1,1,1,2,2,3],
函数应返回新长度 length = 5, 并且原数组的前五个元素被修改为 1, 1, 2, 2, 3 。
你不需要考虑数组中超出新长...]]></description><category></category></item></channel></rss>