两人比赛先选后选谁获胜系列的动态规划问题
摘要:1.分金子(奇虎360 2017春招真题) 题目描述 A、B两伙马贼意外地在一片沙漠中发现了一处金矿,双方都想独占金矿,但各自的实力都不足以吞下对方, 经过谈判后,双方同意用一个公平的方式来处理这片金矿。 处理的规则如下:他们把整个金矿分成n段,由A、B开始轮流从最左端或最右端占据一段,直到分完为止
阅读全文
LeetCode 全解(bug free 训练)
摘要:1.Two Sum 使用hash public int[] twoSum(int[] nums, int target) { int[] res = new int[2]; if (nums == null || nums.length < 2) { return res; } HashMap<In
阅读全文
并查集
摘要:关于Union Find的一个很好的技术介绍blog: http://blog.csdn.net/dm_vincent/article/details/7655764\ 一步步优化代码: Quick find -> quick union ->weighed quick uunion -> 带压缩的
阅读全文
贪心题目汇总
摘要:Jump Game 贪心: 1 public boolean canJump(int[] nums) { 2 if (nums == null || nums.length == 0) { 3 return false; 4 } 5 int finalIndex = 0; 6 for (int i
阅读全文
题目要求比较类似的题目
摘要:接水问题 Container With Most Water Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines ar
阅读全文
几种排序
摘要:1.mergeSort O(nlogn)的时间复杂度,需要O(n)的额外空间。 1 public void sortIntegers2(int[] A) { 2 // Write your code here 3 if (A == null || A.length == 0) { 4 return
阅读全文
图与搜索
摘要:主要知识点: 克隆图 拓扑排序 DFS BFS BFS两个使用场景:图的遍历 简单图求最短路径 BFS in Graph 和BFS in Tree的主要区别就是有无环 遇到让找所有方案的题,一定是DFS,90%的DFS要么是排列,要么是组合。 Clone Graph --not bug free 方
阅读全文
数组
摘要:Tips: 1.遇到subArray相关问题,多思考prefix sum 2.2Sum相关问题的两种解法 hashMap:更加适用于求解结果和下标相关的问题 sortedArray + twoPoint:更加适用于求解结果和值相关问题。对于closest问题多半是使用 two point 3.Par
阅读全文
链表
摘要:Tips: 1.链表结构dummy node 的使用。当链表结构发生变化时使用dummy node.也就是其链表表头可能发生变化的时候。 2.链表结构基本操作: 插入一个节点 删除一个节点 旋转链表 合并两个链表 求一个链表的中间位置 几个总结: 以下题目细节容易出错: 1. 删除排序链表重复元素这
阅读全文
分治
摘要: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!)与排列有关
阅读全文