上一页 1 ··· 4 5 6 7 8
摘要: 1.subArray问题 碰到subArray就想到先转化成前缀和数组,在求解对应问题。 2. two sum a.哈希表的方法:要想明白如何处理数组中两个相同的数相加等于target的情况。 b.掌握two pointers 方法 3.two pointers 应用的问题: two sum及其fo 阅读全文
posted @ 2016-10-13 20:49 coldyan 阅读(214) 评论(0) 推荐(0) 编辑
摘要: 1.什么时候使用dummy node: 当所返回的链表的头不确定的时候使用。 2.链表基本功(链表的题型通常都是分步骤地对链表进行基本操作): a.链表中插入一个节点 b.链表中删除一个节点 c.链表reverse,代码如下: d.merge两个排序链表 e.找链表的中点(快慢指针的方法) 3.题目 阅读全文
posted @ 2016-10-11 15:20 coldyan 阅读(235) 评论(0) 推荐(0) 编辑
摘要: 题目: 给一个包含了'(' 和 ')'的字符串,求出其中最长有效括号的长度。 做题情况:自己做出来,但做了较长的时间。 思路:可以算得穷举法的时间复杂度为O(n^3)。虽然这题求的是最长的长度,但是用不了动态规划,因为无法找到一个合适的状态。考虑能不能在O(n)内实现,即遍历一次字符串。发现可以通过 阅读全文
posted @ 2016-09-29 20:59 coldyan 阅读(4345) 评论(0) 推荐(0) 编辑
摘要: 总结:对二叉树应用分治法时,应避免定义多个递归函数,当出现需要递归求解多种的结果时,尽量使用ResultType来让一次递归返回多种结果。 题目:Binary Tree Maximum Path Sum 给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间 阅读全文
posted @ 2016-09-26 15:02 coldyan 阅读(283) 评论(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 阅读(167) 评论(0) 推荐(0) 编辑
摘要: 总结: 1.什么时候用动态规划? 满足下面三个条件之一,极有可能是使用动态规划: 求最大值最小值; 判断是否可行; 统计方案个数(而不是给出每个具体的方案); 2.什么时候不使用动态规划? 满足下面三个条件之一,极不可能是使用动态规划: 求出所有具体方案而非方案个数; 输入数据是一个集合而不是序列; 阅读全文
posted @ 2016-09-13 09:28 coldyan 阅读(463) 评论(0) 推荐(1) 编辑
摘要: tips: 1.记住(背)如何用栈来实现非递归法的前序遍历和中序遍历。(二叉查找树的迭代器这一题,对理解非递归的中序遍历很有帮助) 非递归法的二叉树前序遍历: 非递归法的二叉树中序遍历 2.区分递归和分治。分治是一种算法,递归是程序的一种实现方式。递归不一定有分治的思想,例如在二叉树遍历中,遍历法也 阅读全文
posted @ 2016-09-06 10:07 coldyan 阅读(1124) 评论(0) 推荐(0) 编辑
摘要: 总结: 1什么时候使用二分法? 当要求使用比O(n)还要低的时间复杂度时,只能是O(lgn)。通常对应二分法和倍增法。 2二分法模板: 首先看一个经典的二分查找问题: 在一个排序数组中找一个数,返回该数出现的任意位置,如果不存在,返回-1 样例  给出数组 [1, 2, 2, 4, 5, 5]. 阅读全文
posted @ 2016-09-04 15:12 coldyan 阅读(353) 评论(0) 推荐(0) 编辑
摘要: 总结:什么时候用回溯法? 如果题目要求求出所有满足条件的解,一般来说是用回溯法,记住回溯法的模板,对不同的题目只需要修改这个条件即可。 回溯法的本质是在问题的解空间树上做深度优先搜索(DFS)。这节课主要讲了四个排列组合的问题,分别是子集,带重复元素的子集,全排列,带重复元素的全排列。本文分析求子集 阅读全文
posted @ 2016-09-04 14:16 coldyan 阅读(347) 评论(0) 推荐(0) 编辑
上一页 1 ··· 4 5 6 7 8