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

浙公网安备 33010602011771号