<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[FrostMonarch的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/FrostMonarch</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; FrostMonarch]]></copyright><item><title><![CDATA[leetcode 128  最长连续序列（hash）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106916362</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106916362</guid><author>FrostMonarch</author><pubDate>Tue, 23 Jun 2020 09:41:01 +0800</pubDate><description><![CDATA[128. 最长连续序列

难度困难437

给定一个未排序的整数数组，找出最长连续序列的长度。

要求算法的时间复杂度为O(n)。

示例:


输入:[100, 4, 200, 1, 3, 2]
输出: 4
解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

解题思路：

我们首先走一遍数列，打一个hash，知道有什么数后，我们就遍历数列，然后尝试从这个点左右延伸，延伸的长度范围内的数字我们下次都可以不用走，可以证明这样我们每个数字最多遍历2次。至于延伸的时候我们需要判断数字在不在数..]]></description><category></category></item><item><title><![CDATA[O(1)空间复杂度找到相交链表的交点]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106904442</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106904442</guid><author>FrostMonarch</author><pubDate>Mon, 22 Jun 2020 16:26:25 +0800</pubDate><description><![CDATA[相交链表

编写一个程序，找到两个单链表相交的起始节点。

如下面的两个链表：



在节点 c1 开始相交。

解题思路：

首先将一条链首尾连起来，这时候就变成了找环的入口点的问题。我们可以用快慢指针先判断有没有环，然后再用快慢指针的交点poi开始和链表头开始找，找到的交点即为环的入口点。


/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *..]]></description><category></category></item><item><title><![CDATA[剑指 Offer 56 - II. 数组中数字出现的次数 II(状态转移 位运算)]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106889593</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106889593</guid><author>FrostMonarch</author><pubDate>Sun, 21 Jun 2020 19:19:07 +0800</pubDate><description><![CDATA[剑指 Offer 56 - II. 数组中数字出现的次数 II

难度中等38

在一个数组nums中除一个数字只出现一次之外，其他数字都出现了三次。请找出那个只出现一次的数字。



示例 1：


输入：nums = [3,4,3,3]
输出：4


示例 2：


输入：nums = [9,1,7,9,7,9,7]
输出：1





解题思路：

我们可以发现，最后的数字假如第i位是1（二进制表示），那么第i位肯定有3*x+1个1，那么我们就思考第i位能不能进行转台转移。最终转...]]></description><category></category></item><item><title><![CDATA[打印数组中出现超过N/K的数字（复杂度O(n*k) 空间复杂度O(k)）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106887996</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106887996</guid><author>FrostMonarch</author><pubDate>Sun, 21 Jun 2020 17:19:18 +0800</pubDate><description><![CDATA[先看一到入门题，这里k=2

剑指 Offer 39. 数组中出现次数超过一半的数字

难度简单34

数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。



你可以假设数组是非空的，并且给定的数组总是存在多数元素。



示例1:


输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2

解题思路：

对于一般的k=2，我们都知道需要有一个候选人，其实k&gt;2我们只需要k-1个候选人即可。所以我们可以用k个桶做个hash，存放这k-1个候选人，桶容量够我们就...]]></description><category></category></item><item><title><![CDATA[剑指offer 数组中的逆序对（归并排序）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106873675</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106873675</guid><author>FrostMonarch</author><pubDate>Sat, 20 Jun 2020 16:12:01 +0800</pubDate><description><![CDATA[剑指 Offer 51. 数组中的逆序对

难度困难176

在数组中的两个数字，如果前面一个数字大于后面的数字，则这两个数字组成一个逆序对。输入一个数组，求出这个数组中的逆序对的总数。



示例 1:


输入: [7,5,6,4]
输出: 5

解题思路：

统计逆序对时候，答案的贡献以左半部分为基准。


class Solution {
public:
    vector&lt;int&gt; arrmv;
    int ans;
    void merge_sort(int l,int .]]></description><category></category></item><item><title><![CDATA[leetcode 42 接雨水（单调栈）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106869917</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106869917</guid><author>FrostMonarch</author><pubDate>Sat, 20 Jun 2020 11:38:38 +0800</pubDate><description><![CDATA[42. 接雨水

难度困难1369

给定n个非负整数表示每个宽度为 1 的柱子的高度图，计算按此排列的柱子，下雨之后能接多少雨水。



上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图，在这种情况下，可以接 6 个单位的雨水（蓝色部分表示雨水）。感谢 Marcos贡献此图。

示例:


输入: [0,1,0,2,1,0,1,3,2,1,2,1]
输出: 6

解题思路：

我们希望找到每根柱子从左往右所做的贡献，很显然，当我们在第i根柱子向右拓展找到第1根比第i根...]]></description><category></category></item><item><title><![CDATA[数字序列中某一位的数字（找规律）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106850541</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106850541</guid><author>FrostMonarch</author><pubDate>Fri, 19 Jun 2020 10:09:31 +0800</pubDate><description><![CDATA[面试题44. 数字序列中某一位的数字

难度中等32

数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中，第5位（从下标0开始计数）是5，第13位是1，第19位是4，等等。

请写一个函数，求任意第n位对应的数字。



示例 1：


输入：n = 3
输出：3


示例 2：


输入：n = 11
输出：0



限制：

0 &lt;= n &lt;2^31
解题思路：

我们首先需要定位到这个数字属于哪一个大区间[1,9], [10,99],[1...]]></description><category></category></item><item><title><![CDATA[剑指offer面试题38. 字符串的排列（回溯）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106818796</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106818796</guid><author>FrostMonarch</author><pubDate>Wed, 17 Jun 2020 21:34:11 +0800</pubDate><description><![CDATA[面试题38. 字符串的排列

难度中等48

输入一个字符串，打印出该字符串中字符的所有排列。



你可以以任意顺序返回这个字符串数组，但里面不能有重复元素。



示例:


输入：s = "abc"
输出：["abc","acb","bac","bca","cab","cba"]




限制：

1 &lt;= s 的长度 &lt;= 8

解题思路：

假如这里全是不同的字母，我们可以用简单的打标记回溯的方法来解决，但是这里会有重复的字母，这就需要我们先对字符串进行排序，本次回溯选择的时候 ...]]></description><category></category></item><item><title><![CDATA[表示数值的字符串（状态转移）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106735183</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106735183</guid><author>FrostMonarch</author><pubDate>Sat, 13 Jun 2020 17:21:14 +0800</pubDate><description><![CDATA[面试题20. 表示数值的字符串

难度中等19

请实现一个函数用来判断字符串是否表示数值（包括整数和小数）。例如，字符串"+100"、"5e2"、"-123"、"3.1416"、"0123"都表示数值，但"12e"、"1a3.14"、"1.2.3"、"+-5"、"-1E-16"及"12e+5.4"都不是。



注意：本题与主站 65 题相同：https://leetcode-cn.com/problems/valid-number/

状态转移在dp中用的比较多，不过dp里面的状态没有像这题一样这么多.]]></description><category></category></item><item><title><![CDATA[拼多多 2020校园招聘 二维表第k大数（二分）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106647655</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106647655</guid><author>FrostMonarch</author><pubDate>Tue, 09 Jun 2020 19:22:10 +0800</pubDate><description><![CDATA[在一块长为n，宽为m的场地上，有n✖️m个1✖️1的单元格。每个单元格上的数字就是按照从1到n和1到m中的数的乘积。具体如下



n = 3, m = 3

1  2  3

2  4  6

3  6  9



给出一个查询的值k，求出按照这个方式列举的的数中第k大的值v。

例如上面的例子里，

从大到小为(9, 6, 6, 4, 3, 3, 2, 2, 1)

k = 1, v = 9

k = 2, v = 6

k = 3, v = 6

...

k = 8, v = 2

...]]></description><category></category></item><item><title><![CDATA[拼多多 2020校园招聘 骰子期望（古典概型，互斥）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106647405</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106647405</guid><author>FrostMonarch</author><pubDate>Tue, 09 Jun 2020 17:37:14 +0800</pubDate><description><![CDATA[扔n个骰子，第i个骰子有可能投掷出Xi种等概率的不同的结果，数字从1到Xi。所有骰子的结果的最大值将作为最终结果。求最终结果的期望。

解题思路：

这里我们需要用古典概型计算每一个取值的概率，然后再算期望。

我们知道，总共的可能性是：
...]]></description><category></category></item><item><title><![CDATA[拼多多 2020校招 多多的电子字典（字典树前缀搜索，DP）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106646904</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106646904</guid><author>FrostMonarch</author><pubDate>Tue, 09 Jun 2020 17:27:31 +0800</pubDate><description><![CDATA[多多鸡打算造一本自己的电子字典，里面的所有单词都只由a和b组成。
每个单词的组成里a的数量不能超过N个且b的数量不能超过M个。
多多鸡的幸运数字是K，它打算把所有满足条件的单词里的字典序第K小的单词找出来，作为字典的封面。

解题思路：



首先，答案最终的输出为上面这棵字典树的先序输出第k次。当然这棵树的a.b数量不能超过题目给的a,b数量。我们在先序输出的时候可以判断它的左子树的节点数是否小于k，是的话，我们左子树就可以不访问了。为此我们需要计算一个量dp[n][m][sta]；当sta == 0时，]]></description><category></category></item><item><title><![CDATA[拼多多 2020校招 多多的排列函数（找规律 构造）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106646425</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106646425</guid><author>FrostMonarch</author><pubDate>Tue, 09 Jun 2020 17:15:22 +0800</pubDate><description><![CDATA[数列 {An}为N的一种排列。

例如N=3，可能的排列共6种：


			1

			2

			3

			4

			5

			6
			
			
			1, 2, 3

			1, 3, 2

			2, 1, 3

			2, 3, 1

			3, 1, 2

			3, 2, 1
			
		定义函数F:





其中|X|表示X的绝对值。



现在多多鸡想知道，在所有可能的数列 {An} 中，F(N)的最小值和最大值分别是多少。

解题思路：

我们发现，只要把连续的4个数倒着放...]]></description><category></category></item><item><title><![CDATA[leetcode 437路径总和（前缀和，hash，复杂度O(n)做法）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106592909</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106592909</guid><author>FrostMonarch</author><pubDate>Sat, 06 Jun 2020 20:24:55 +0800</pubDate><description><![CDATA[437. 路径总和 III

难度简单424

给定一个二叉树，它的每个结点都存放着一个整数值。

找出路径和等于给定数值的路径总数。

路径不需要从根节点开始，也不需要在叶子节点结束，但是路径方向必须是向下的（只能从父节点到子节点）。

二叉树不超过1000个节点，且节点数值范围是 [-1000000,1000000] 的整数。

示例：


root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8

      10
     /  \
    5   -3
 ]]></description><category></category></item><item><title><![CDATA[leetcode 338. 比特位计数（dp）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106567485</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106567485</guid><author>FrostMonarch</author><pubDate>Fri, 05 Jun 2020 11:51:23 +0800</pubDate><description><![CDATA[338. 比特位计数

难度中等318

给定一个非负整数num。对于0 ≤ i ≤ num范围中的每个数字i，计算其二进制数中的 1 的数目并将它们作为数组返回。

示例 1:


输入: 2
输出: [0,1,1]

示例2:


输入: 5
输出: [0,1,1,2,1,2]

进阶:

给出时间复杂度为O(n*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗？
	要求算法的空间复杂度为O(n)。
	你能进一步完善解法吗？要求在C++或任何其他语...]]></description><category></category></item><item><title><![CDATA[leetcode 312 戳气球（区间dp）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106559911</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106559911</guid><author>FrostMonarch</author><pubDate>Thu, 04 Jun 2020 22:45:20 +0800</pubDate><description><![CDATA[312. 戳气球

难度困难297

有n个气球，编号为0到n-1，每个气球上都标有一个数字，这些数字存在数组nums中。

现在要求你戳破所有的气球。每当你戳破一个气球i时，你可以获得nums[left] * nums[i] * nums[right]个硬币。这里的left和right代表和i相邻的两个气球的序号。注意当你戳破了气球i后，气球left和气球right就变成了相邻的气球。

求所能获得硬币的最大数量。

说明:

你可以假设nums[-1] =...]]></description><category></category></item><item><title><![CDATA[leetcode 309. 最佳买卖股票时机含冷冻期（DP）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106529389</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106529389</guid><author>FrostMonarch</author><pubDate>Wed, 03 Jun 2020 17:50:14 +0800</pubDate><description><![CDATA[给定一个整数数组，其中第i个元素代表了第i天的股票价格 。​

设计一个算法计算出最大利润。在满足以下约束条件下，你可以尽可能地完成更多的交易（多次买卖一支股票）:

你不能同时参与多笔交易（你必须在再次购买前出售掉之前的股票）。卖出股票后，你无法在第二天买入股票 (即冷冻期为 1 天)。
示例:

输入: [1,2,3,0,2]
输出: 3
解释: 对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]

解题思路：

假设DP状态为dp[n][sta]表示走到第n天 sta==1 表...]]></description><category></category></item><item><title><![CDATA[leetcode 287. 寻找重复数（构造，二分）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106519676</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106519676</guid><author>FrostMonarch</author><pubDate>Wed, 03 Jun 2020 11:02:07 +0800</pubDate><description><![CDATA[给定一个包含n + 1 个整数的数组nums，其数字都在 1 到 n之间（包括 1 和 n），可知至少存在一个重复的整数。假设只有一个重复的整数，找出这个重复的数。

示例 1:

输入: [1,3,4,2,2]
输出: 2
示例 2:

输入: [3,1,3,4,2]
输出: 3
说明：

不能更改原数组（假设数组是只读的）。只能使用额外的 O(1) 的空间。时间复杂度小于 O(n2) 。数组中只有一个重复的数字，但它可能不止重复出现一次。

解题思路：

我们建立一个数组cnt[i]，表示数组中小...]]></description><category></category></item><item><title><![CDATA[leetcode 283. 移动零（思维）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106482462</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106482462</guid><author>FrostMonarch</author><pubDate>Mon, 01 Jun 2020 21:42:16 +0800</pubDate><description><![CDATA[题目大意：

给定一个数组 nums，编写一个函数将所有 0 移动到数组的末尾，同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:

必须在原数组上操作，不能拷贝额外的数组。尽量减少操作次数。

解题思路：

我们需要维护一个变量是 在我们遍历的过程中出现的第一个0的位置lsz，然后每次交换lsz和当前遍历的元素，假如当前遍历的元素不为0.


class Solution {
public:
    void moveZeroes(vect]]></description><category></category></item><item><title><![CDATA[leetcode 238. 除自身以外数组的乘积（前缀乘积，思维）]]></title><link>https://blog.youkuaiyun.com/FrostMonarch/article/details/106475210</link><guid>https://blog.youkuaiyun.com/FrostMonarch/article/details/106475210</guid><author>FrostMonarch</author><pubDate>Mon, 01 Jun 2020 16:24:28 +0800</pubDate><description><![CDATA[题目大意：

给你一个长度为n的整数数组nums，其中n &gt; 1，返回输出数组output，其中 output[i]等于nums中除nums[i]之外其余各元素的乘积。

示例:

输入: [1,2,3,4]
输出: [24,12,8,6]


提示：题目数据保证数组之中任意元素的全部前缀元素和后缀（甚至是整个数组）的乘积都在 32 位整数范围内。

说明: 请不要使用除法，且在O(n) 时间复杂度内完成此题。

进阶：
你可以在常数空间复杂度内完成这个题目吗？（ 出于对空间...]]></description><category></category></item></channel></rss>