分治
摘要:Merge k Sorted Lists Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity。 分析:加入直接合并的话,每次需要找到k个数中的最小,一共需要
阅读全文
两头指针问题
摘要:Minimum Size Subarray Sum** Given an array of n positive integers and a positive integer s, find the minimal length of a subarray of which the sum ≥ s
阅读全文
侧滑窗口最大值相关题目
摘要:最大树 给出一个没有重复的整数数组,在此数组上建立最大树的定义如下: 根是数组中最大的数 左子树和右子树元素分别是被父节点元素切分开的子数组中的最大值 利用给定的数组构造最大树。 思路: 对于元素cur,只需求得cur的左边的第一个比它大的数和右边的第一个比它大的数,把cur挂在这两个数中的较小的一
阅读全文
汉诺塔问题(递归、栈)
摘要:修改一下汉诺塔的游戏规则,现在不能直接从左边走到右边,也不能直接右边走到左边。 方法一:递归实现 现在分析一下,比如左边有1~n,那么移动最后一个的情况,就是: 1.1-n-1从左边移动到右边 2.n从左边移动到中间 3.1-n-1从右边移动到左边 4.n从中间移动到右边 5.1-n-1从左边移动到
阅读全文
数据结构设计 Stack Queue
摘要:之前在简书上初步总结过几个有关栈和队列的数据结构设计的题目。http://www.jianshu.com/p/d43f93661631 1.线性数据结构 Array Stack Queue Hash 2.非线性数据结构 Tree HashMap Heap/PriorityQueue 3.HashSe
阅读全文
动态规划问题
摘要:递归 VS 动态规划,这里通过数三角形问题来引入递归与动态规划的区别 递归 + 记忆化搜索 —> 动态规划。 分治法与递归实现的动态规划的区别:有没有重复计算。 使用动态规划的几种极可能情况: 1.求最大值和最小值 2.判断是否可行 3.统计方案个数 很大可能不使用动态规划的情况: 1.求出所有具体
阅读全文
DFS排列组合问题
摘要:这四个使用DFS来求解所有组合和排列的例子很有代表性,这里做一个总结: 1.不带重复元素的子集问题 1 public ArrayList<ArrayList<Integer>> subsets(int[] nums) { 2 // write your code here 3 ArrayList<A
阅读全文
二叉树与分治
摘要:几种常见的二叉树: 满二叉树 :除了叶子节点外,所有节点都有两个儿子,深度为 k 的满二叉树具有 2^k - 1 个节点。 完全二叉树 :若设二叉树的高度为h,除第h层外,其他各层 (1 ~ h -1)层节点都达到最大个数,第h层的叶子节点从左到右依次排列。 平衡二叉树(AVL) :是一棵平衡的二叉
阅读全文
代码面试算法相关技巧
摘要:1.复杂度分析相关问题 1.复杂度分析相关问题 O(1)是极少出现的 O(log n)一般很自然的就需要往二分方向思考 O(sqrt(n)) 分解质因数 O(n) O(nlog(n))一般可能需要排序 O(n^2)、O(n^3)数组、枚举、动态规划 O(2^n)与组合有关的搜索 O(n!)与排列有关
阅读全文
二分法 Binary Search
摘要:二分法还是比较常见和简单的,之前也遇到过一些二分的相关题目,虽然不难,但是每次都需要在边界问题上诸多考虑,今天听了九章算法的课程,学习到一种方法使得边界问题简单化。 二分法的几个注意点: 1. mid = start + (end - start) / 2;//特定情况下,避免越界。 2.循环控制条
阅读全文