<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[michaelbinwang的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/michaelbinwang</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; michaelbinwang]]></copyright><item><title><![CDATA[Django学习笔记]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/61195531</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/61195531</guid><author>michaelbinwang</author><pubDate>Fri, 10 Mar 2017 12:34:29 +0800</pubDate><description><![CDATA[Model层开发：
1. Model模型是网站的数据的信息源。

2. 每个model对应数据库的一张Table表每个model都是一个class。
3. 每个模型都是django.db.models.Model
 的一个Python 子类.
4.
 model的每个属性都表示table中的一个字段。
https://python-ning.github.io/2015/12/23]]></description><category></category></item><item><title><![CDATA[Django入门]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/60451848</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/60451848</guid><author>michaelbinwang</author><pubDate>Sun, 05 Mar 2017 04:43:33 +0800</pubDate><description><![CDATA[1. Django安装1.7
pip install -v django==1.7.1
 https://andrew-liu.gitbooks.io/django-blog/content/kai_fa_huan_jing_he_django_an_zhuang.html

2. 安装缺少的package： 

pip
 install name_packege
2. How t]]></description><category></category></item><item><title><![CDATA[二分搜索]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/54944527</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/54944527</guid><author>michaelbinwang</author><pubDate>Thu, 09 Feb 2017 11:40:02 +0800</pubDate><description><![CDATA[**区间缩小->
 剩下两个下标->判断两个下标**

1.
 这两个下标根据先要end还是先要start先后顺序会有不同。

2.
 如果没有target出现，令start = mid, end = mid不会影响结果。你只要让问题的规模缩小即可。因为start和end不管是否包括mid值都不影响最后的结果


**注：不要把缩小区间和得到答案放在一个循环里面，容易出问题，增]]></description><category></category></item><item><title><![CDATA[Remove Duplicate]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/54578238</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/54578238</guid><author>michaelbinwang</author><pubDate>Tue, 17 Jan 2017 01:14:10 +0800</pubDate><description><![CDATA[Remove Duplicates from Sorted Array
sorted array, remove the duplicates in place,
 each element appear only once.

(1) 这里的j指向的是非重的最后一个元素，每次拷贝前先j++



Remove
 Duplicates from Sorted Array II
]]></description><category></category></item><item><title><![CDATA[Undirected Graph BFS/DFS]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/54375282</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/54375282</guid><author>michaelbinwang</author><pubDate>Thu, 12 Jan 2017 10:27:13 +0800</pubDate><description><![CDATA[无向图BFS

Clone Graph
(1) BFS无向图需要有一个set visted，为什么树没有？因为图中可能会重复访问（又回去）。

每次我们只考虑set中没有的node：注意，需要一个queue一个set，其它和bfs一个tree一样的。
(2) hashmap这里主要是用于加快访问速度O(1)，每次不用去list里面重新找node。


(1) DFS做法:
每次]]></description><category></category></item><item><title><![CDATA[双指针，窗口类]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53883691</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53883691</guid><author>michaelbinwang</author><pubDate>Mon, 26 Dec 2016 09:43:37 +0800</pubDate><description><![CDATA[Minimum Size Subarray Sum
（1）永远都是先用左右指针先处理，再移动左右指针(left
（2）right永远指向下一个将要被处理的元素
（3）left永远指向当前等待处理的元素
  (4) 循环条件right]]></description><category></category></item><item><title><![CDATA[记忆化搜索DP]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53880713</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53880713</guid><author>michaelbinwang</author><pubDate>Mon, 26 Dec 2016 01:33:50 +0800</pubDate><description><![CDATA[Longest Increasing Path in a Matrix
(1) 本质上是DFS加上一个cache，每次在dfs前check一下cache，每次dfs后返回res前把res存到cache中方便下次直接调用。
(2) optimal substructure是如何与n-1，或者n-2规模的子问题取得联系]]></description><category></category></item><item><title><![CDATA[subarray 划分类]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53879875</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53879875</guid><author>michaelbinwang</author><pubDate>Mon, 26 Dec 2016 01:33:09 +0800</pubDate><description><![CDATA[(1) 所谓 “划分类” DP，是指给定原数组之后，将其划分为 k 个子数组，使其 sum / product 最大 / 最小的 DP 类问题。]]></description><category></category></item><item><title><![CDATA[Paint fence and house]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53868507</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53868507</guid><author>michaelbinwang</author><pubDate>Sun, 25 Dec 2016 10:22:39 +0800</pubDate><description><![CDATA[Paint House
(1) 二维dp = 两个属性： 一个属性代表房子的下标，另外一个属性代表那个下标房子的颜色。
(2) optimal substructure之间存在比较，所以需要存储3个状态，最后取min，max比较。而paint fance不存在比较，只在意四则运算关系，因此只有一个状态即可。]]></description><category></category></item><item><title><![CDATA[入门House Robber]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53866297</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53866297</guid><author>michaelbinwang</author><pubDate>Sun, 25 Dec 2016 01:34:00 +0800</pubDate><description><![CDATA[House Robber

(1) 先从 Top-Down 的角度来想，如果我们定义
 maxProfit(n) 为长度为 n 的 array 中所能得到的最大利益的话，不难看出在计算 maxProfit(n) 的时候，它的值只和前两个
 subproblem 相关，即 maxProfit(n - 1) 和 maxProfit(n - 2).  关键是找到这个！！

由此我们发现了 D]]></description><category></category></item><item><title><![CDATA[动态规划入门]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53864630</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53864630</guid><author>michaelbinwang</author><pubDate>Sun, 25 Dec 2016 00:16:25 +0800</pubDate><description><![CDATA[（1）用 DP 做的题大多数返回值是int/boolean, 求max/min，不能打乱原来输入顺序。

（2）动态规划有两个重要定义，一个叫 "optimal substructure"，另一个叫 "overlap subproblem".


各种排序 / Tree 类问题中，都会用到 divide & conquer 的思想，去把问题分成若干个 "disjoint" subprob]]></description><category></category></item><item><title><![CDATA[回溯和dfs]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53834718</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53834718</guid><author>michaelbinwang</author><pubDate>Fri, 23 Dec 2016 08:08:06 +0800</pubDate><description><![CDATA[回溯: 形状像树，状态A/B，回到上一层，选不选
DFS：逐字匹配(坐标移动)，在bottom level的基础上加东西！]]></description><category></category></item><item><title><![CDATA[枚举法]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53779457</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53779457</guid><author>michaelbinwang</author><pubDate>Wed, 21 Dec 2016 04:46:28 +0800</pubDate><description><![CDATA[Generate Parentheses
这题和二叉树其实挺像的，因为在每一个位置都只有两种可能 "(" 和 ")".
（1）首先left如果大于0，就一直append left，相当于获得一个有不同长度left (的集合
（2）然后针对每个left，append上相应的right )，相当于获得right)的集合

Palindrome Partitioning

本质上是char]]></description><category></category></item><item><title><![CDATA[Subsets, Combination, Permutation, Combination Sum]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53629000</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53629000</guid><author>michaelbinwang</author><pubDate>Wed, 14 Dec 2016 03:14:00 +0800</pubDate><description><![CDATA[1. Combination 类问题最重要的是去重， dfs() 函数里带一个 index 参数可以很好的解决这个问题。
2. dfs里增加一个“前一个元素”的参数，每一层递归只考虑比上一个元素大的值。


public class Solution {
    public List> combine(int n, int k) {
        List> res = new A]]></description><category></category></item><item><title><![CDATA[backtracking题目基本思路]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53624988</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53624988</guid><author>michaelbinwang</author><pubDate>Wed, 14 Dec 2016 03:09:08 +0800</pubDate><description><![CDATA[1. 都要有个helper function，每个helper function中都要带上当前要考虑的因素。
2. 非Tree是用 index 形式（array），Tree是用TreeNode形式
3. 非Tree在 DFS 结束后回溯； Tree Paths 在 leaf node 回溯

DFS + Backtracking 都有三个步骤：

Add elementDFSRemov]]></description><category></category></item><item><title><![CDATA[路径与路径和]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53618992</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53618992</guid><author>michaelbinwang</author><pubDate>Tue, 13 Dec 2016 23:49:43 +0800</pubDate><description><![CDATA[Backtracking中对字符串的传递处理：用 StringBuilder 传递可以省去递归中新建的 string copies.

StringBuilder 的backtrack也很简单，直接
setLength(int len)]]></description><category></category></item><item><title><![CDATA[quick select]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53579038</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53579038</guid><author>michaelbinwang</author><pubDate>Mon, 12 Dec 2016 07:21:15 +0800</pubDate><description><![CDATA[https://discuss.leetcode.com/topic/14611/java-quick-select


public static int quickselect(int[] arr, int k){
int start = 0, end = arr.length - 1, index = k - 1;
while(start 
int pivot = partiti]]></description><category></category></item><item><title><![CDATA[快速排序]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53578531</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53578531</guid><author>michaelbinwang</author><pubDate>Mon, 12 Dec 2016 06:01:55 +0800</pubDate><description><![CDATA[public static void quicksort(int[] a, int left, int right){  
//为什么要有left和right呢，因为你的规模要缩小，如果和体现规模缩小？
int pivot; //下次读取前assign value即可
if(left 
pivot = partition(a, left, right);
quicksort(a, lef]]></description><category></category></item><item><title><![CDATA[BST]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53498337</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53498337</guid><author>michaelbinwang</author><pubDate>Wed, 07 Dec 2016 02:38:15 +0800</pubDate><description><![CDATA[Closest Binary Search Tree Value
所谓 “最近的点”，可能是 parent ，可能是 child，可能在左边，也可能在右边。


所以一要存好 prev;

二要两边都探，不能沿着一边硬走。

使用二叉树的preoder traversal，不断update closet value


public class Solution {]]></description><category></category></item><item><title><![CDATA[Tree, Min/Max/Balanced Depth]]></title><link>https://blog.youkuaiyun.com/michaelbinwang/article/details/53496442</link><guid>https://blog.youkuaiyun.com/michaelbinwang/article/details/53496442</guid><author>michaelbinwang</author><pubDate>Wed, 07 Dec 2016 00:43:27 +0800</pubDate><description><![CDATA[Maximum Depth of Binary Tree
public class Solution {
    public int maxDepth(TreeNode root) {
        if(root == null) return 0;

        return Math.max(maxDepth(root.left), maxDepth(root.right)) + ]]></description><category></category></item></channel></rss>