随笔分类 -  九章算法总结

只有注册用户登录后才能阅读该文。
posted @ 2017-03-19 19:28 coldyan 阅读(19) 评论(0) 推荐(0)
只有注册用户登录后才能阅读该文。
posted @ 2017-03-19 19:11 coldyan 阅读(19) 评论(0) 推荐(0)
只有注册用户登录后才能阅读该文。
posted @ 2017-03-15 23:01 coldyan 阅读(26) 评论(0) 推荐(0)
摘要:1 (1) coding style(要想bug free最有效方法是锻炼coding style): a 函数名:名字取得长一点没关系,重点是要通过名字能一眼看出来函数做什么; 函数名不要文不对题,比如check..这种一般要返回boolean; b 能用函数返回的子逻辑尽量写函数,增加代码可读性 阅读全文
posted @ 2017-01-17 18:44 coldyan 阅读(244) 评论(0) 推荐(0)
摘要:merge sort 空间复杂度:O(n)(sort list是O(1)) 时间复杂度为O(nlgn) 稳定性:稳定排序 先局部有序,再整体有序 1 public class Solution { 2 /** 3 * @param A an integer array 4 * @return voi 阅读全文
posted @ 2016-11-20 20:46 coldyan 阅读(675) 评论(0) 推荐(0)
摘要:1. 图论算法(用BFS,DFS) 拓扑排序 克隆图 找连通块 六度问题 2.BFS 队列实现; 树中的BFS与图中的BFS有什么不同?树中没有环,图中有环需要一个set来记录搜索过的节点; 应用:图的遍历,最短路径 3 搜索 碰到找所有解决方案的题,一定是DFS搜索。搜索题的套路比较固定。 阅读全文
posted @ 2016-11-02 22:05 coldyan 阅读(224) 评论(0) 推荐(0)
摘要:1.栈和队列 队列:BFS 栈:DFS 例题: (1)min stack: 思路:使用两个栈实现。第二个栈对应相应层为栈顶的最小值。 更节省空间的方法是:相邻层如果值相同可用计数的机制来节省空间。 (2)Largest Rectangle in Histogram 思路:这道题暴力解法的时间复杂度是 阅读全文
posted @ 2016-10-16 21:02 coldyan 阅读(219) 评论(0) 推荐(0)
摘要:1.subArray问题 碰到subArray就想到先转化成前缀和数组,在求解对应问题。 2. two sum a.哈希表的方法:要想明白如何处理数组中两个相同的数相加等于target的情况。 b.掌握two pointers 方法 3.two pointers 应用的问题: two sum及其fo 阅读全文
posted @ 2016-10-13 20:49 coldyan 阅读(228) 评论(0) 推荐(0)
摘要:1.什么时候使用dummy node: 当所返回的链表的头不确定的时候使用。 2.链表基本功(链表的题型通常都是分步骤地对链表进行基本操作): a.链表中插入一个节点 b.链表中删除一个节点 c.链表reverse,代码如下: d.merge两个排序链表 e.找链表的中点(快慢指针的方法) 3.题目 阅读全文
posted @ 2016-10-11 15:20 coldyan 阅读(257) 评论(0) 推荐(0)
摘要:1.单序列动态规划 特点:字符串,数字等序列的问题。 状态模板: f[i]表示前i个数字/字符/位置...... 注意:如果序列长度为n,那么dp的数组长度应该为n+1。因为f[i]分别表示为前0个字符...,前1个字符...,......,前n个字符...。所以一共n+1个状态变量。 例题: (1 阅读全文
posted @ 2016-09-14 16:22 coldyan 阅读(175) 评论(0) 推荐(0)
摘要:总结: 1.什么时候用动态规划? 满足下面三个条件之一,极有可能是使用动态规划: 求最大值最小值; 判断是否可行; 统计方案个数(而不是给出每个具体的方案); 2.什么时候不使用动态规划? 满足下面三个条件之一,极不可能是使用动态规划: 求出所有具体方案而非方案个数; 输入数据是一个集合而不是序列; 阅读全文
posted @ 2016-09-13 09:28 coldyan 阅读(490) 评论(0) 推荐(1)
摘要:tips: 1.记住(背)如何用栈来实现非递归法的前序遍历和中序遍历。(二叉查找树的迭代器这一题,对理解非递归的中序遍历很有帮助) 非递归法的二叉树前序遍历: 非递归法的二叉树中序遍历 2.区分递归和分治。分治是一种算法,递归是程序的一种实现方式。递归不一定有分治的思想,例如在二叉树遍历中,遍历法也 阅读全文
posted @ 2016-09-06 10:07 coldyan 阅读(1158) 评论(0) 推荐(0)
摘要:总结: 1什么时候使用二分法? 当要求使用比O(n)还要低的时间复杂度时,只能是O(lgn)。通常对应二分法和倍增法。 2二分法模板: 首先看一个经典的二分查找问题: 在一个排序数组中找一个数,返回该数出现的任意位置,如果不存在,返回-1 样例  给出数组 [1, 2, 2, 4, 5, 5]. 阅读全文
posted @ 2016-09-04 15:12 coldyan 阅读(378) 评论(0) 推荐(0)
摘要:总结:什么时候用回溯法? 如果题目要求求出所有满足条件的解,一般来说是用回溯法,记住回溯法的模板,对不同的题目只需要修改这个条件即可。 回溯法的本质是在问题的解空间树上做深度优先搜索(DFS)。这节课主要讲了四个排列组合的问题,分别是子集,带重复元素的子集,全排列,带重复元素的全排列。本文分析求子集 阅读全文
posted @ 2016-09-04 14:16 coldyan 阅读(360) 评论(0) 推荐(0)