<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[ychope99的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/ychope99</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; ychope99]]></copyright><item><title><![CDATA[【Udacity笔记】AI for Robitics - Localization 机器人定位]]></title><link>https://blog.youkuaiyun.com/ychope99/article/details/108139294</link><guid>https://blog.youkuaiyun.com/ychope99/article/details/108139294</guid><author>ychope99</author><pubDate>Fri, 21 Aug 2020 07:22:27 +0800</pubDate><description><![CDATA[分享我的Gatech OMSCS学位的网课笔记，开始上课都没时间刷题了。。

https://www.udacity.com/course/artificial-intelligence-for-robotics--cs373

这是第一课： Localization的

基本原理

这一章主要讲如何通过先验概率+观察结果+移动后的观察结果，给机器人定位。



从上到下四根线，所有的前提都是门的位置已知。

没有任何条件下的车的位置的均匀概率分布
	已知车感应到在一扇门旁边，此时车的位置的概率分布。
	已]]></description><category></category></item><item><title><![CDATA[【小YC的Leetcode日记】#79 单词搜索 Word Search]]></title><link>https://blog.youkuaiyun.com/ychope99/article/details/108047850</link><guid>https://blog.youkuaiyun.com/ychope99/article/details/108047850</guid><author>ychope99</author><pubDate>Mon, 17 Aug 2020 05:29:38 +0800</pubDate><description><![CDATA[https://leetcode.com/problems/word-search/

2020/08/16

一题经典的宽搜，没有什么难点。用二维vis数组防止回头，退出的时候要记得把那个格子的vis重新设成0。

我的源代码search函数里面return的True和False是没必要的，但是懒得改了。

如果需要输出路径的话，可以用global变量记录路径，也可以对search函数多加母i,j的变量（这样用的内存少一些）。




class Solution:
    board = [[]]
 .]]></description><category></category></item><item><title><![CDATA[【小YC的Leetcode日记】#42 接雨水 Trapping Rain Water]]></title><link>https://blog.youkuaiyun.com/ychope99/article/details/108032594</link><guid>https://blog.youkuaiyun.com/ychope99/article/details/108032594</guid><author>ychope99</author><pubDate>Sun, 16 Aug 2020 10:13:45 +0800</pubDate><description><![CDATA[2020/08/14

https://leetcode.com/problems/trapping-rain-water/

从挡板那一题的推荐来写的，写完了才发现是hard。

用的是下面这个单调栈的做法。

https://leetcode-cn.com/problems/trapping-rain-water/solution/dan-diao-zhan-jie-jue-jie-yu-shui-wen-ti-by-sweeti/

感觉还是比较好理解的，把水面横着分割，每次遇到栈里面比栈顶大的数字（]]></description><category></category></item><item><title><![CDATA[【小YC的Leetcode日记】#33 在循环有序数列中查找 Search in Rotated Sorted Array]]></title><link>https://blog.youkuaiyun.com/ychope99/article/details/107997523</link><guid>https://blog.youkuaiyun.com/ychope99/article/details/107997523</guid><author>ychope99</author><pubDate>Fri, 14 Aug 2020 09:57:42 +0800</pubDate><description><![CDATA[https://leetcode.com/problems/search-in-rotated-sorted-array/

2020/08/12

题目是在循环有序的数列中查找一个数，要求时间复杂度log(N)。

看到log(N)和有序就想到二分法，所以我最直观的想法是找出分界点，然后对分界点左右两边的有序数列分别做二分。

分界点的寻找，要想满足题目条件，就也一定要用分治法。考虑一段数列以及它的左右端点，其关于分界点的关系可能有三种情况：

1. 在分界点左边
2. 在分界点右边
3. 包含分界点

]]></description><category></category></item><item><title><![CDATA[【小YC的Leetcode日记】#22 生成括号 Generate Parentheses]]></title><link>https://blog.youkuaiyun.com/ychope99/article/details/107954055</link><guid>https://blog.youkuaiyun.com/ychope99/article/details/107954055</guid><author>ychope99</author><pubDate>Wed, 12 Aug 2020 11:50:30 +0800</pubDate><description><![CDATA[https://leetcode.com/problems/generate-parentheses/

08/11

简单的一题搜索，一次过。一个判断括号是否匹配的小技巧是设左括号为+1，右括号为-1，多维护一个记录总和的x，为了保证括号匹配，在它的任何位置往前看，左括号的数列一定大于等于右括号的数量，也就是x一定大于等于0。 这样就不用每次都去算括号匹配不匹配，大大提高了运算效率，下面的代码速度超过了95%的提交。


class Solution:
    def generateParenthesi]]></description><category></category></item><item><title><![CDATA[【小YC的Leetcode日记】#4 两个有序数组的中位数 Median of Two Sorted Arrays]]></title><link>https://blog.youkuaiyun.com/ychope99/article/details/107948692</link><guid>https://blog.youkuaiyun.com/ychope99/article/details/107948692</guid><author>ychope99</author><pubDate>Wed, 12 Aug 2020 07:29:03 +0800</pubDate><description><![CDATA[https://leetcode.com/problems/median-of-two-sorted-arrays/

2020/08/10

Leetcode刷的第一道hard，前前后后用了三天。看到是排序好的数列，又要求log的时间复杂度，就可以想到用分治法。我自己想了一个算法，但是感觉不够漂亮，要递归里面套递归（虽然复杂度也是log级别）。于是在网上看了一个别人的算法，在一个函数里面同时进行两个数组的递归，比较漂亮，最后边界调了挺久才调出来。

方法一：

写一个函数，计算对一个从小到大的排序数组a，]]></description><category></category></item><item><title><![CDATA[【小YC的Leetcode日记】#15 三个数之和 3Sum]]></title><link>https://blog.youkuaiyun.com/ychope99/article/details/107892570</link><guid>https://blog.youkuaiyun.com/ychope99/article/details/107892570</guid><author>ychope99</author><pubDate>Sun, 09 Aug 2020 12:48:14 +0800</pubDate><description><![CDATA[https://leetcode.com/problems/3sum/

2020/08/08

最开始直观地写了个搜索，那就是O(n^3)，这样部分数据会超时。

后来想想剪枝，其实数字就三种可能：正、负、0。所以三个数相加就四种情况：正正负、负负正、正0负、000

分别考虑这四种就行了，在每种情况下，两个同号的数字用数列循环，另一种符号的数字使用集合(set)，集合的in运算平均复杂度是O(1)，所以这样算法的平均复杂度就被优化成了O(n^2)。

这个解法相当于用空间换时间，要开正数组、负数组、正集]]></description><category></category></item><item><title><![CDATA[【小YC的Leetcode日记】#11 装最多水的容器  Container With Most Water]]></title><link>https://blog.youkuaiyun.com/ychope99/article/details/107877121</link><guid>https://blog.youkuaiyun.com/ychope99/article/details/107877121</guid><author>ychope99</author><pubDate>Sat, 08 Aug 2020 12:11:04 +0800</pubDate><description><![CDATA[https://leetcode.com/problems/container-with-most-water/

2020/08/07

i, j板子间的水量是 (j - i) * min(Hi, Hj)， 直接枚举会超时。

后来想了个贪心法，从左右两边开始，每一轮往中心更新一根，遇到水量更多的状态就更新一次，但是发现这样是不行的，局部最优不一定是全局最优——比如中间可能有两根超级长的板子，而它们两边的一圈板子都特别短，只有两个指针同时走到中间才能达到，但这用贪心法是永远走不到但，左右其中一根即使走到了]]></description><category></category></item><item><title><![CDATA[【小YC的Leetcode日记】#6 字符串曲折变换 Zigzag Conversion]]></title><link>https://blog.youkuaiyun.com/ychope99/article/details/107856544</link><guid>https://blog.youkuaiyun.com/ychope99/article/details/107856544</guid><author>ychope99</author><pubDate>Fri, 07 Aug 2020 10:22:13 +0800</pubDate><description><![CDATA[https://leetcode.com/problems/zigzag-conversion/

可以算到easy难度的一题，对(2*Rownum-2)取余就行。

算行列的时候从0开始更好算，更符合取余的样式。

第一次提交的时候没考虑row=1的情况，边界错误了，当时只想到了row &gt;= len(s)，看来以后提交前还是要多多检查边界条件。。
...]]></description><category></category></item><item><title><![CDATA[【小YC的Leetcode日记】#5 最长回文子串 longest palindromic substring]]></title><link>https://blog.youkuaiyun.com/ychope99/article/details/107855303</link><guid>https://blog.youkuaiyun.com/ychope99/article/details/107855303</guid><author>ychope99</author><pubDate>Fri, 07 Aug 2020 09:45:30 +0800</pubDate><description><![CDATA[https://leetcode.com/problems/longest-palindromic-substring/

2020/08/05

经典老题了，很容易想到动态规划。f[i,j]定义为s[i,j]子字符串是否是回文，那么可以写出状态转移方程：
f[i, j] = True if f[i+1, j-1] == True and s[j] == s[j]

最开始写循环的时候用i放在最外层，写出来发现不对，比如i=0的时候，j一直放前走，然后回头看中间那一段的状态，但这个时候中间那一段是没有被更新]]></description><category></category></item><item><title><![CDATA[【小YC的Leetcode日记】#3 最长非重复子串 longest-substring-without-repeating-characters]]></title><link>https://blog.youkuaiyun.com/ychope99/article/details/107855028</link><guid>https://blog.youkuaiyun.com/ychope99/article/details/107855028</guid><author>ychope99</author><pubDate>Fri, 07 Aug 2020 09:36:05 +0800</pubDate><description><![CDATA[https://leetcode.com/problems/longest-substring-without-repeating-characters/

2020/08/04

最开始写了个O(n^2)的算法，给每段字符弄一个set，set的大小和子字符串长度一样就是unique，可是最后一个点没过。

后来发现有一个O(n)的算法，左端点i放在第一层循环，右端点j在里面，永远维护一个unique的字符串，如果当前s[i,j]不unique就移动i（直至到达j），中途遇到unique子串就停止移动i，.]]></description><category></category></item></channel></rss>