算法
jollysoul
千里之行,始于足下。
展开
-
字符串匹配的KMP算法---理解next数组的意义
本文是查阅多篇文章进行整理,目的是直白清晰的讲解KMP的主要思路。本部分内容转自:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html http://blog.csdn.net/yearn520/arti原创 2017-04-18 09:48:43 · 732 阅读 · 0 评论 -
Leetcode——146. LRU Cache 一个优雅的LRU的C++实现
//使用hash_map和list实现的LRU。 实现了get和put操作//get 得到对用的value,并且前移。//put 如果不存在,加入,此时可能会挤掉尾元素。存在:移动到队列首。//改进点在于如果发生缺页需要重新加入,这时候可以添加一个//hash_map存储key-value,并改写一下put函数即可。class LRUCache {public: LRUCache原创 2017-09-11 10:51:19 · 6883 阅读 · 3 评论 -
剑指offer-剑指offer——栈的压入弹出顺序 (两种不错的的解法)
//剑指offer——栈的压入弹出顺序//输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。//假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,//序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。//(注意:这两个序列的长度是相等的)//方法一:使用一个hash表记录原创 2017-09-19 00:20:53 · 889 阅读 · 0 评论 -
网易互娱游戏研发工程师笔试
//第二题 流量统计问题,二分查找区间#include #include #include #include using namespace std;int main(){ int n,m; cin >> n; vector time(n); vector flow(n); string a, b, c, d; int k; for (int i = 0; i<n; i原创 2017-09-17 08:53:52 · 4547 阅读 · 0 评论 -
两个栈实现队列,两个队列实现栈
#include #include #include using namespace std;//使用两个栈实现队列,实现了push,pop,front操作//其中栈s2是辅助栈,push直接在s1中插入//pop从s2中出栈,如果s2是空的,将s1倒进s2,然后再出栈,这样减少了倒栈次数,比较高效。//front就是s2的top,跟pop类似。template class My原创 2017-08-30 17:16:37 · 255 阅读 · 0 评论 -
Kolakoski序列——搜狐笔试
//Kolakoski序列是一个仅由1和2组成的无限数列,是一种通过“自描述”来定义的数列。//他的前几项为1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1,2,//如果相同数字是一组,则每一组的个数为1,2,2,1,1,2,1,2,2,1,2,2,1,1//a(n)等于第n组数的长度,因此是自描述的。目前没有递推公式,只能用自描述方式给出//这道题是Kola原创 2017-08-30 09:28:31 · 572 阅读 · 0 评论 -
C++编程输入数组的处理——不给数组长度,直接给一行数组
正常情况下,我们要从键盘读一个数组,一般会先告诉你一个数组大小size,然后可以创建相应的数组a[size](注:C++11允许变量作为数组长度)或者建立vector(size). 然后就可以用一个size次的循环正好把size个数组元素存进去。但是如果不给数组长度怎么办?直接扔给你一个行数组元素,怎么把他们存到对应整数数组中呢?intmain(){ i原创 2017-08-28 10:27:56 · 23910 阅读 · 0 评论 -
二叉树的前序遍历非递归形式
//二叉树的遍历,所谓的前中后,其实就是根节点相对于左右节点的//访问时间,前就是根左右,中就是左根右,后就是左右根//递归形式的前序遍历void PreSearch(TreeNode* head){ if (head){ cout val; PreSearch(head->left); PreSearch(head->right); }}//非递归形式的前序遍历,用v原创 2017-09-05 10:11:07 · 496 阅读 · 0 评论 -
快速排序的非递归算法实现
//快速排序算法的非递归实现,这种方法应该说是尾递归//的非递归快速排序算法,它只把>1的右区间放入栈中,//减少了出栈入栈的次数。templatevoid NoQuickSort(vector& a, int s, int t){ vector> p(a.size()); p[0] = { s, t }; int k = 1, i = 0, j = 0; while (k ||原创 2017-09-04 20:18:00 · 772 阅读 · 0 评论 -
面试经典的海量数据处理(TOPK)问题—转载+个人见解!
常见问题:①Top K问题:分治+Trie树/Hash_map+小顶堆。采用Hash(x)%M将原文件分割成小文件,如果小文件太大则继续Hash分割,直至可以放入内存。②重复问题:BitMap位图 或 Bloom Filter布隆过滤器 或 Hash_set集合。每个元素对应一个bit处理。③排序问题:外排序 或 BitMap位图。分割文件+文件内排序+文件之间归并。原创 2017-04-17 15:41:42 · 9527 阅读 · 3 评论 -
完美洗牌算法
题目有个长度为2n的数组{a1,a2,a3,…,an,b1,b2,b3,…,bn},希望排序后{a1,b1,a2,b2,….,an,bn},请考虑有无时间复杂度o(n),空间复杂度0(1)的解法。来源2013年UC的校招笔试题思路一第①步、确定b1的位置,即让b1跟它前面的a2,a3,a4交换:a1,b1,a2,a3,a4,b2,b3,b4第②步、接着确定b2原创 2017-08-02 00:08:11 · 15083 阅读 · 2 评论 -
Quicksort 快速排序—注意点以及代码实现(笔试手写代码)
Quicksort排序是一种不稳定的平均时间复杂度O(nlogn)的比较排序。 但是快速排序是十几排序应用中最好的选择。因为他O(nlogn)隐含的常数因子非常小。 原址排序:不需要额外的空间,在原空间进行排序。 不稳定排序:是因为Partition过程中会把key值相等的元素打乱顺序。 最坏情况:两个子递归的元素划分严重不平衡,比如一个是n-1,一个1.此时时间复杂度为O(n^2原创 2017-07-19 09:01:29 · 1254 阅读 · 0 评论 -
三大迷宫生成算法 (Maze generation algorithm) -- 深度优先,随机Prim,递归分割
之前同学参加面试,面试官问到迷宫生成算法,这个问题自己想了下也没有好办法,所有就查询了相关资料。这里进行了相关整理:本文主要讲解的迷宫生成算法有三种:1.Recursive backtracker ( 递归回溯,也是深度优先算法)2.Randomized Prim's algorithm(随机Prim算法,让我想起了最小生成树的Prim算法)3.Recursive division原创 2017-06-12 20:31:40 · 72728 阅读 · 10 评论 -
2018网易游戏校招笔试题
2017年4月15日的网易游戏实习生校招题目,3道题,2小时,对于没有经过ACM训练的人来说时间挺紧,最后没做完。但是毕竟猪场挑高手,自己技不如人,还需要多多努力。回头自己整理了下自己做得题目。可能有错误,可以给我留言。解题思路:拿到题目,感觉有点像背包问题,考虑使用DP来做,深入理解一下:可以创建一个第二题:求淘汰赛可能最小Depth解题思路:我们可以让胜者作原创 2017-04-17 14:56:06 · 28531 阅读 · 1 评论 -
01背包问题——经典DP问题,优化与未优化
#include #include #include using namespace std;int main(){ int n,m; vector w(n),v(n); for (int i=0;i<n;i++) cin>>w[i]>>v[i]; //v为容量数组,W为价值数组,m为总容量 //优化的01背包问题,使用一维数组原创 2017-09-12 10:41:26 · 1144 阅读 · 0 评论