<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[declanzane的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/declanzane</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; declanzane]]></copyright><item><title><![CDATA[music transciption 思路]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/129557816</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/129557816</guid><author>declanzane</author><pubDate>Thu, 16 Mar 2023 10:20:23 +0800</pubDate><description><![CDATA[例如Audeo: Audio Generation for a Silent Performance Video 这篇文章，通过视频输出midi 伴奏，然后再生成音乐。可以参考：Online Audio-Visual Source Association for Chamber Music Performances 这篇文章。第三阶段：真人伴奏，可以参考AR pianoist 的思路，直接正确的弹奏。1. 图像和声音联合检测可以帮助更好的进行声音的识别；第二阶段：通过动作生成伴奏音乐，AIGC 方向。]]></description><category></category></item><item><title><![CDATA[test1]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/106251673</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/106251673</guid><author>declanzane</author><pubDate>Thu, 21 May 2020 10:45:06 +0800</pubDate><description><![CDATA[## 1.1
$$E_{o t e}\left(\mathfrak{L}_{a} | X, f\right)=\sum_{h} \sum_{\boldsymbol{x} \in \mathcal{X}-X} P(\boldsymbol{x}) \mathbb{I}(h(\boldsymbol{x}) \neq f(\boldsymbol{x})) P\left(h | X, \mathfrak{L}_{a}\right)$$
[解析]：参见公式(1.2)

## 1.2
$$\begin{aligned}
]]></description><category></category></item><item><title><![CDATA[109. 有序链表转换二叉搜索树]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/105177304</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/105177304</guid><author>declanzane</author><pubDate>Sun, 29 Mar 2020 13:22:00 +0800</pubDate><description><![CDATA[找中点然后采用分治法。

classSolution{

public:

TreeNode*sortedListToBST(ListNode*head){

if(head==NULL)returnNULL;

if(head-&gt;next==NULL)returnnewTreeNode(head-&gt;val);

...]]></description><category></category></item><item><title><![CDATA[105. 从前序与中序遍历序列构造二叉树]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/105175780</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/105175780</guid><author>declanzane</author><pubDate>Sun, 29 Mar 2020 11:37:06 +0800</pubDate><description><![CDATA[这道题按照下面的思路进行的。

直接复制思路：

**C++**。首先要知道一个结论，前序/后序+中序序列可以唯一确定一棵二叉树，所以自然而然可以用来建树。

看一下前序和中序有什么特点，前序1,2,4,7,3,5,6,8，中序4,7,2,1,5,3,8,6；

有如下特征：

前序中左起第一位1肯定是根结点，我们可以据此找到中序中根结点的位置rootin；
	中序中根结点左边就是左子树结点，右...]]></description><category></category></item><item><title><![CDATA[114. Flatten Binary Tree to Linked List]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/105173720</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/105173720</guid><author>declanzane</author><pubDate>Sun, 29 Mar 2020 09:50:57 +0800</pubDate><description><![CDATA[先序遍历，用一个stack 来存储节点。然后用一个dummyHead 来存储头结点。

classSolution{

public:

voidflatten(TreeNode*root){

if(root==NULL)return;

TreeNode*dummyHead=newTreeNode(0);

...]]></description><category></category></item><item><title><![CDATA[面试题 04.05. 合法二叉搜索树]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/105027472</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/105027472</guid><author>declanzane</author><pubDate>Sun, 22 Mar 2020 14:23:44 +0800</pubDate><description><![CDATA[这个就是一个分治法+寻找最小最大值。二叉搜索树根节点要比左子树的最大值大，比右子树的最小值小。

classSolution{

private:

public:

boolisValidBST(TreeNode*root){

if(root==NULL)returntrue;

TreeNode*max_left=root-&g...]]></description><category></category></item><item><title><![CDATA[300. 最长上升子序列]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104954064</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104954064</guid><author>declanzane</author><pubDate>Wed, 18 Mar 2020 21:26:00 +0800</pubDate><description><![CDATA[用dp 的方法，注意的是，F[I] 这个状态是以i作为结尾的最长的子序列。最后是取所有状态的最大值。

classSolution{

public:

intlengthOfLIS(vector&lt;int&gt;&amp;nums){

intm(nums.size());

if(!m)return0;

vector...]]></description><category></category></item><item><title><![CDATA[63. 不同路径 II]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104934951</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104934951</guid><author>declanzane</author><pubDate>Tue, 17 Mar 2020 23:59:28 +0800</pubDate><description><![CDATA[经典的dp , 只是障碍物要单独处理下。

classSolution{

public:

intuniquePathsWithObstacles(vector&lt;vector&lt;int&gt;&gt;&amp;obstacleGrid){

intm(obstacleGrid.size()),n(obstacleGrid[0].size());

...]]></description><category></category></item><item><title><![CDATA[120. 三角形最小路径和]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104920880</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104920880</guid><author>declanzane</author><pubDate>Tue, 17 Mar 2020 14:14:04 +0800</pubDate><description><![CDATA[这个应该是一个典型的dp问题，用一个和输入相同的二维数组进行到达此节点时的最小路径。

注意两个在每一行的边界条件。以及row&lt;=2时的处理，否则容易overflow.

classSolution{

public:

intminimumTotal(vector&lt;vector&lt;int&gt;&gt;&amp;triangle){

vecto...]]></description><category></category></item><item><title><![CDATA[138. 复制带随机指针的链表]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104885560</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104885560</guid><author>declanzane</author><pubDate>Sun, 15 Mar 2020 20:42:23 +0800</pubDate><description><![CDATA[就是用回溯法。用一个hash_map来存储访问过的节点。

classSolution{

private:

unordered_map&lt;Node*,Node*&gt;all;

public:

Node*copyRandomList(Node*head){

if(head==NULL)returnNULL;

if...]]></description><category></category></item><item><title><![CDATA[142. Linked List Cycle II]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104882260</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104882260</guid><author>declanzane</author><pubDate>Sun, 15 Mar 2020 17:58:44 +0800</pubDate><description><![CDATA[两种解法，一种是通过hash将访问过的存储起来，当遇到环的时候，break; 另一种是快慢指针，floyd解法。

下面是hash_map解法：

classSolution{

public:

ListNode*detectCycle(ListNode*head){

unordered_map&lt;ListNode*,int&gt;all;

...]]></description><category></category></item><item><title><![CDATA[143. Reorder List]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104876215</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104876215</guid><author>declanzane</author><pubDate>Sun, 15 Mar 2020 12:05:20 +0800</pubDate><description><![CDATA[这个题有几种解法，一个是用vector 存储，O(n)空间复杂度，一个是直接在链表上操作，O(1)空间复杂度，但是操作复杂，涉及到链表中点查找，revserse 以及链表的merge，这样一个题就复习了三个解法。

下面是O(1)的解法。

classSolution{

public:

ListNode*reverseList(ListNode*head){

...]]></description><category></category></item><item><title><![CDATA[86. 分隔链表]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104870077</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104870077</guid><author>declanzane</author><pubDate>Sat, 14 Mar 2020 22:37:31 +0800</pubDate><description><![CDATA[就是用两个head 一个是大，一个是小，然后分别制定，一定要将Big-&gt;next=NULL; 否则会形成循环列表，超出时间限制。

classSolution{

public:

ListNode*partition(ListNode*head,intx){

ListNode*DummySmall=newListNode(0);

...]]></description><category></category></item><item><title><![CDATA[236. Lowest Common Ancestor of a Binary Tree]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104740785</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104740785</guid><author>declanzane</author><pubDate>Sun, 08 Mar 2020 21:19:56 +0800</pubDate><description><![CDATA[采用分治法来求解：

如果找到任意一个node 则返回，这样就可以分为三种情况。两个node 在左右子树都找到，返回root.

classSolution{

public:

TreeNode*lowestCommonAncestor(TreeNode*root,TreeNode*p,TreeNode*q){

if(root==NULL...]]></description><category></category></item><item><title><![CDATA[450. 删除二叉搜索树中的节点]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104740150</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104740150</guid><author>declanzane</author><pubDate>Sun, 08 Mar 2020 20:51:44 +0800</pubDate><description><![CDATA[主要是分三种情况，叶子节点，有左子树，有右子树。当时有个bug就是在寻找mode的时候是

root-&gt;left=deleteNode(root-&gt;left,key); 而不是deleteNode(root-&gt;left,key).



classSolution{

public:

intprenodeSearch(TreeNode*root){...]]></description><category></category></item><item><title><![CDATA[124. 二叉树中的最大路径和]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104733726</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104733726</guid><author>declanzane</author><pubDate>Sun, 08 Mar 2020 15:29:49 +0800</pubDate><description><![CDATA[本质上是一个分治法。要记录每个节点的最大路径，同时记录maxPath. maxPath 可能包含左右路径。

classSolution{

private:

intmaxPath=INT_MIN;

public:

intsinglePathMax(TreeNode*root){

if(root==NULL)return0;



...]]></description><category></category></item><item><title><![CDATA[148. 排序链表]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104528224</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104528224</guid><author>declanzane</author><pubDate>Thu, 27 Feb 2020 00:24:26 +0800</pubDate><description><![CDATA[nlog 的算法，是归并排序，同时是o1的空间复杂度，所以在merge的时候，直接在原链表上进行操作。在split的时候，由于包含head, 所以是走n-1步。

classSolution{

public:

ListNode*merge(ListNode*l1,ListNode*l2){

ListNodedummyhead(0);

...]]></description><category></category></item><item><title><![CDATA[162. 寻找峰值]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104525756</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104525756</guid><author>declanzane</author><pubDate>Wed, 26 Feb 2020 21:42:04 +0800</pubDate><description><![CDATA[因为题目是log n的时间复杂度，所以很容易想到二分查找。主要是看区间选择的条件。注意left=mid+1 ； 不能是mid，否则死循环。

classSolution{

public:

intfindPeakElement(vector&lt;int&gt;&amp;nums){

if(nums.size()==1)return0;

...]]></description><category></category></item><item><title><![CDATA[56. 合并区间]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104350681</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104350681</guid><author>declanzane</author><pubDate>Sun, 16 Feb 2020 22:57:47 +0800</pubDate><description><![CDATA[这个主要是考察的排序，这里直接在原数组上操作，空间复杂度O1, 时间复杂度On

boolcmp(vector&lt;int&gt;&amp;a,vector&lt;int&gt;&amp;b){

returna[0]&lt;b[0];

}

classSolution{

public:

vector&lt;vector&lt;int&gt;&gt;m...]]></description><category></category></item><item><title><![CDATA[187. 重复的DNA序列]]></title><link>https://blog.youkuaiyun.com/declanzane/article/details/104349238</link><guid>https://blog.youkuaiyun.com/declanzane/article/details/104349238</guid><author>declanzane</author><pubDate>Sun, 16 Feb 2020 21:30:26 +0800</pubDate><description><![CDATA[以10个字母的string作为一个查找的最小单位。要注意map[s.substr(i,10)]==2 是为了去重，同时以及边界条件。

classSolution{

public:

vector&lt;string&gt;findRepeatedDnaSequences(strings){

unordered_map&lt;string,in...]]></description><category></category></item></channel></rss>