<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[tmfighting的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/tmfighting</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; tmfighting]]></copyright><item><title><![CDATA[Vins-Mono系列代码和理论解读＜五＞.位姿图Pose_graph理论和代码实现细节]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/125350390</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/125350390</guid><author>tmfighting</author><pubDate>Sat, 18 Jun 2022 18:45:39 +0800</pubDate><description><![CDATA[快速了解vins-mono的位姿图优化理论和代码实现]]></description><category></category></item><item><title><![CDATA[Vins-Mono系列代码和理论解读＜三＞. vins初始化流程和代码实现细节]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/125350294</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/125350294</guid><author>tmfighting</author><pubDate>Sat, 18 Jun 2022 18:33:50 +0800</pubDate><description><![CDATA[快速了解vins-mono的初始化实现流程]]></description><category></category></item><item><title><![CDATA[矩阵间的求导]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/111873230</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/111873230</guid><author>tmfighting</author><pubDate>Mon, 28 Dec 2020 19:45:57 +0800</pubDate><description><![CDATA[最近由于需要手推一些最优化函数的求解公式，因此整理了一下各种矩阵间的求导法则，以方便理解相关库的代码或者自己动手代码实现。
二范数类的矩阵求导

形如
E=∥P∥2
E = \left \| P \right \|^{2}
E=∥P∥2
则有
σEσP=2P
\frac{\sigma E}{\sigma P} = 2P
σPσE​=2P
2.形如
E=∥P−Q∥2
E = \left \| P- Q \right \|^{2}
E=∥P−Q∥2
则有
σEσP=2(P−Q)
\frac{\sigma E}{]]></description><category></category></item><item><title><![CDATA[两图像间的单应性矩阵估计]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/111630776</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/111630776</guid><author>tmfighting</author><pubDate>Thu, 24 Dec 2020 15:05:29 +0800</pubDate><description><![CDATA[两图像间的单应性矩阵估计
单应性矩阵的定义:
两图像间的单应性矩阵估计基于一个假设: 这两个图像拍摄的场景在一个平面上或者两图像是由相机发生纯旋转时采集的。当满足这个假设后，就可以根据两图像上提取的匹配特征点集合(至少四对匹配特征点)求出单应矩阵H。这个矩阵H包含了相机内参矩阵Ｋ，两视图之间的R/t以及假想平面参数n/d，具体的公式如下式所示，推导过程可参考slam14讲中Page146.
p2=K(R−tnTd)K−1p1
p_{2} = \mathbf{K}(\mathbf{R}-\frac{\math]]></description><category></category></item><item><title><![CDATA[[LeetCode] 849. Maximize Distance to Closest Person @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98870458</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98870458</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 14:39:12 +0800</pubDate><description><![CDATA[一．题目：
给出了一个列表表示一排座位，1代表这个位置有人坐，0代表这个位置没人做。现在需要找一个位置坐，并找出坐在哪个位置时，离旁边人的座位的距离最大，是多少。
二．解题思路：
我们可以先将座位列表分割开，记录每块部分的大小，取其中最大的一块．同时注意，座位两端的位置要分开考虑．代码如下:
class Solution(object):
    def maxDistToClosest(self...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 238. Product of Array Except Self @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98868740</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98868740</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 14:18:50 +0800</pubDate><description><![CDATA[一．题目：
给一个数组，求出每个位置的其他所有数的乘积．不能使用除法，时间复杂度要求是O(n).
Example:
Input:  [1,2,3,4]
Output: [24,12,8,6]

二．解题思路：
我们可以设计两个数组来储存每个位置的左边的数的积和右边的数的积．
代码如下：
class Solution(object):
    def productExceptSelf(self, ...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 946. Validate Stack Sequences @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98868017</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98868017</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 14:00:53 +0800</pubDate><description><![CDATA[一．题目：
给定栈的push序列和pop序列，判断两者是否匹配．
二．解题思路：
我们可以设计这个栈来验证．如果遍历完整个pop序列发现并不能排空栈，那说明其中有问题．
代码如下：
class Solution(object):
    def validateStackSequences(self, pushed, popped):
        """
        :type pushe...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 456. 132 Pattern @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98864491</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98864491</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 13:28:33 +0800</pubDate><description><![CDATA[一．题目：
在一个序列中找到132的模式，就是第一个数小于第二第三个数，且第三个数小于第二个数。
二．解题思路：
技巧性好强的一道题，实在想不出来．．．
参考别人的博客代码如下：
class Solution(object):
    def find132pattern(self, nums):
        """
        :type nums: List[int]
        ...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 402. Remove K-digits @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98860713</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98860713</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 12:50:35 +0800</pubDate><description><![CDATA[一．题目：
给一个用字符串表示的数字，移除字符串中的k个字符，使得结果是最小的．
Example 1:
Input: num = "1432219", k = 3
Output: "1219"
Explanation: Remove the three digits 4, 3, and 2 to form the new number 1219 which is the smallest.

Ex...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 224. Basic Calculator @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98857558</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98857558</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 12:19:24 +0800</pubDate><description><![CDATA[一．题目：
实现一个基本的计算器，输入为包含"(",")","+","-"，" "的字符串，输出运算结果．
二．解题思路：
这种题肯定是用栈实现，一般建立两个栈(数字栈和符号栈)，有以下几种情况：
(1)对于数字，注意连续几位都是数字；
(2)对于符号，注意符号的优先级
代码如下：
class Solution(object):
    def calculate(self, s):
      ...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 20. Valid Parentheses @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98857212</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98857212</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 12:13:19 +0800</pubDate><description><![CDATA[一．题目：
给定一个包含’(’, ‘)’, ‘{’, ‘}’, ‘[’ 和 ']'的字符串，判断它是否是有效的．
二．解题思路：
设计一个栈，遍历字符串，当字母是左括号时压入栈中，当是右括号是看此时栈顶元素是否是对应的左括号．
代码如下：
class Solution(object):
    def isValid(self, s):
        """
        :type s: s...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 622. Design Circular Queue @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98854079</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98854079</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 11:37:20 +0800</pubDate><description><![CDATA[一．题目：
设计一个环形队列数据结构．
Example:
MyCircularQueue circularQueue = new MyCircularQueue(3); // set the size to be 3
circularQueue.enQueue(1);  // return true
circularQueue.enQueue(2);  // return true
circula...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 621. Task Scheduler @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98852862</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98852862</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 11:21:52 +0800</pubDate><description><![CDATA[一．题目：
CPU任务调度问题，同样的两个task之间的时间间距不能少于n,否则会用idle填充。问这批task需要多少时间片才能完成。
Example:
Input: tasks = ["A","A","A","B","B","B"], n = 2
Output: 8
Explanation: A -&gt; B -&gt; idle -&gt; A -&gt; B -&gt; idle -&g...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 239. Sliding Window Maximum @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98850345</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98850345</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 10:48:22 +0800</pubDate><description><![CDATA[一．题目：
给定一个数组．还有一个滑动窗口长度k，窗口从最左边滑到最右边．返回每一次窗口中的最大值．
Example:
Input: nums = [1,3,-1,-3,5,3,6,7], and k = 3
Output: [3,3,5,5,6,7] 
Explanation: 

Window position                Max
---------------       ...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 206. Reverse Linked List @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98801960</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98801960</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 00:18:41 +0800</pubDate><description><![CDATA[一．题目：
反转链表
二．解题思路：
非递归法：
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None
class Solution(object):
    def r...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 142. Linked List Cycle II @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98801406</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98801406</guid><author>tmfighting</author><pubDate>Thu, 08 Aug 2019 00:10:44 +0800</pubDate><description><![CDATA[一．题目：
判断链表是否存在环路，若有则返回环路路口节点，否则返回-1.
二．解题思路：
快慢指针法：通过判断快指针和慢指针是否相遇来验证是否存在环路；
当快慢指针相遇时，将慢指针指向链表头部，同时两指针移动速度都为1，再次相遇的地方就是环路路口．
代码如下：
# Definition for singly-linked list.
# class ListNode(object):
#     ...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 82. Remove Duplicates from Sorted List II @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98799201</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98799201</guid><author>tmfighting</author><pubDate>Wed, 07 Aug 2019 23:49:31 +0800</pubDate><description><![CDATA[一．题目：
给一个排序好的链表，删除其中的重复数字．
二．解题思路：
设置两个变量pre,cur=pre.next，比较pre.next.val和cur.next.val的值是否相同，若相同则移动cur直至不相同.
代码如下：
# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 236. 	 Lowest Common Ancestor of a Binary Tree     @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98796835</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98796835</guid><author>tmfighting</author><pubDate>Wed, 07 Aug 2019 23:41:18 +0800</pubDate><description><![CDATA[一．题目：
求二叉树中两个节点的最近公共祖先．
二．解题思路：
首先，很通俗的解法就是找到两个节点的路径，然后对两条路径进行判断，分叉口的上一个节点就是这两个节点的最近公共祖先．
代码如下：
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         se...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 111. Minimum Depth of Binary Tree @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98795125</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98795125</guid><author>tmfighting</author><pubDate>Wed, 07 Aug 2019 23:09:06 +0800</pubDate><description><![CDATA[一．题目：
给一颗二叉树，求它的最小深度
二．解题思路：
给定根节点，我们只需要计算它的左子树的最小深度和右子树的最小深度的较小值+1．所以我们的递归函数就出来了，代码如下：
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val =...]]></description><category></category></item><item><title><![CDATA[[LeetCode] 105. Construct Binary Tree from Preorder and Inorder Traversal @ python]]></title><link>https://blog.youkuaiyun.com/tmfighting/article/details/98794337</link><guid>https://blog.youkuaiyun.com/tmfighting/article/details/98794337</guid><author>tmfighting</author><pubDate>Wed, 07 Aug 2019 23:02:08 +0800</pubDate><description><![CDATA[一．题目：
从前序遍历和中序遍历还原整棵树．
二．解题思路：
理解前序遍历和中序遍历的特点．
代码如下：
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#    ...]]></description><category></category></item></channel></rss>