随笔分类 - 数据结构
Data Structure
不重复随机数列的生成算法 Leetcode 384. Shuffle an Array
摘要:[1] https://blog.csdn.net/yhhwatl/article/details/75003385
阅读全文
聪明的木匠 (哈夫曼树)
摘要:假设有n个权值,则构造出的哈夫曼树有n个叶子结点。 n个权值分别设为 w1、w2、…、wn,则哈夫曼树的构造规则为[1]: (1) 将w1、w2、…,wn看成是有n 棵树的森林(每棵树仅有一个结点); (2) 在森林中选出两个根结点的权值最小的树合并,作为一棵新树的左、右子树,且新树的根结点权值为其
阅读全文
连续区间最值问题
摘要:1. 已知一个一维数组nums,求nums的一个连续区间,使其和最大。返回最大和。(O(n)) hdu1005 2. 已知一个一维数组nums,求nums的一个最长连续区间,使其和为k。返回最大区间长度。(O(n)) 3. 已知一个一维数组nums,求nums的一个连续区间,使其和是不超过k的最大值
阅读全文
链表反转 (Multi-method)
摘要:链表反转是链表相关问题最基础的知识,做完LeetCode中LinkedList后才会有这种体会,因为ACM算法中不会涉及这一部分。解决这一问题有多种方法,在面试中面试官通常也会要求写出多种。包括stack,iterative,以及recursive。 (1) stack: a. 按顺序将节点push
阅读全文
二分查找 (最经典代码,及其边界条件的实践分析)
摘要:(注: 原创博客,转载请引用 http://www.cnblogs.com/wubdut/p/5578147.html) 代码举例: Array递增,找第一个不小于target的下标。 int theIndex(vector<int> Array) { int lo = 0, hi = Array.
阅读全文
深搜和广搜的对比
摘要:Reference: [1] http://www.cnblogs.com/lonelycatcher/archive/2011/07/29/2120654.html [2] http://www.cnblogs.com/celia01/archive/2012/07/30/2615842.html
阅读全文
马拉车求最大回文字串
摘要:改进的代码 (输入字符串为s): int getLongestPalindrome(string s) { string str; str.push_back('&'); for (char item : s) { str.push_back('#'); str.push_back(item); }
阅读全文
单调队列
摘要:问题描述:给定一个长度为N的整数数列{ai},i = 0, 1, ... , N-1和窗口长度k.要求: f(i) = max{a(i-k+1), a(i-k+2), ... , a(i)}, i = 0, 1, ... , N-1.解法: 在求f(i)时,其前k+1个数在f(i-1)中比较过,...
阅读全文