算法
文章平均质量分 52
大数学家拉格朗日
苦逼从windows转到搞linux又苦逼的从C转到搞JAVA
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
猴子分桃问题
五只猴子分桃。半夜,第一只猴子先起来,它把桃分成了相等的五堆,多出一只。于是,它吃掉了一个,拿走了一堆; 第二只猴子起来一看,只有四堆桃。于是把四堆合在一起,分成相等的五堆,又多出一个。于是,它也吃掉了一个,拿走了一堆;......其他几只猴子也都是 这样分的。问:这堆桃至少有多原创 2011-09-27 09:05:37 · 1694 阅读 · 0 评论 -
海量数据统计通解之 整数型数据的判重——位映射的妙用
首先,我解释一下什么是位映射(bitmap)。你可以将位映射理解成是哈希表的一种压缩表示。哈希表将元素映射到一个存储位置上,位映射将元素映射到一个位数组的某一个位上。如图所示元素1对应HASH表的第0个存储位置,在位映射中,第0位代表E1。同理,E2被映射到了第i个存原创 2011-09-30 12:32:03 · 1750 阅读 · 0 评论 -
微软面试题:在1001个整数中找出一个重复出现的数字
出处:http://blog.youkuaiyun.com/zhanxinhang>题目如下:假设你有一个用1001个整数组成的数组,这些整数是任意排列的,但是你知道所有的整数都在1到1000(包括1000)之间。此外,除一个数字出现两次外,其他所有数字只出现一次。假设你只能对这个数转载 2011-10-01 01:36:31 · 2590 阅读 · 0 评论 -
把一个二分查找树通过指针转化的方式改成排序双链表(传说是MS出的题)
这个题目花里胡哨地东西很多,但是说到底是考察了以下的两个基础知识:1. 二分查找树如何转成一个有序序列?(中序遍历)2. 树怎么知道自己遍历上的前驱和后继?(树的线索化)解这个题目不难,只需要在中序遍历函数中增加一个全局的指针变量,该变量代表上一次遍历的节点,原创 2011-10-02 01:48:10 · 1247 阅读 · 0 评论 -
海量数据统计通解之 TOP X问题——堆排序在此削铁如泥!
上文讨论了怎么把一大堆数据归纳划分到零碎的文件中,让拥有相同特征的数据之间彼此比较和操作。这篇文章现在就解决让你蛋疼无比的TOP X问题。首先。什么是TOP X? X是一个数字,比如TOP 10,TOP 100,或者某些数据的第100小,第100大。一个必然的算法就是我给这些原创 2011-09-30 01:41:54 · 2106 阅读 · 0 评论 -
海量数据统计通解之 整数型数据的频率统计——巧妙应用数值范围分割数据
整数型数据如何判重我已经给出了答案,当位数组过于庞大的时候怎么利用位数组的映射范围分割文件我也给出了答案。现在考虑这么一个事:有这么一天,全中国孩子的高考成绩都汇报给你了(海量数据),现在,我让你统计出来考试总分对应的人数。例如 总分610的有那么1万个人,510原创 2011-09-30 14:46:03 · 1772 阅读 · 2 评论 -
海量数据统计通解之 超长型字符串的判重与统计——HASH与Trie树双剑合璧!!
在很多情况下我们分割文件,判重和统计数据时都需要借助HASH函数的帮助,例如MD5,SHA1等。例如我现在有50亿个长字符串,每一个字符串1k。我现在希望你统计出来各个字符串出现的频度,给出TOP X神马的。1个1K的字符串我自认为Trie树是不适合的。因此我这个有限原创 2011-10-01 18:28:20 · 2962 阅读 · 0 评论 -
堆排序小记
堆排序是一种对大量非常高效的排序算法。它只占用1个交换空间,在NLogN的复杂度内完成排序。同时,堆也是种数据结构,它的定义如下:对于数组中下标为 i 的元素,如果 下标2i+1 和 2(i+1)的元素都小于它,那么这个数组就是一个堆,并称其为大顶堆(相对应的,还有小原创 2011-09-30 19:22:45 · 1365 阅读 · 1 评论 -
海量数据统计通解之 偌大的数据,“弱小”的内存——逐个击破!
通常,海量数据统计上都存在一个普遍问题就是希望内存占用很低。为什么要这么做?因为数据海量,海量到你再有钱也买不了能装下他们的内存。比如这个:有a,b两个文件,每一个里面有50亿个URL,每一个URL为64字节。让你找出来同时在a,b两个文件中的URL。内存只有4g。我原创 2011-09-29 21:06:21 · 2318 阅读 · 1 评论 -
你好,我是炸弹人!(将一个二维数组中,所有0所在行和列都置为零,其他位置的值不变)
小时候玩炸弹人的游戏咱们都知道,你扔一个炸弹出去它会形成十字火焰,然后等你威力提高之后,整个一行和一列都是火焰。因此我现在把这个算法就叫做炸弹人问题。这是提出问题的贴子:点击打开链接里面有很多人提出下面的算法。整个算法思想很简单。事先约定好一个肯定不会在数组中出现的数原创 2011-10-03 02:18:22 · 1537 阅读 · 0 评论 -
人2X不能怪笔试出题的之求数组连乘问题(搜狗)
一个程度为N的数组,现在要令a[0] = a[1]*a[2]....a[n-1]a[1] = a[0]*a[2]....a[n-1]a[2] = a[0]*a[1]....a[n-1]...a[n-1] = a[0]*a[2]...a[n-2]条件原创 2011-10-08 09:46:29 · 2259 阅读 · 0 评论 -
人2X不能怪笔试出题的之:淘宝2012校园招聘研发类算法第一题,树的所有兄弟链表化。
2012,淘宝笔试第一题,我被无情地鄙视了,自己算法基础真是不好,在当时没能看出这道题的解法。题目要求:一颗完全二叉树,每一个节点除了pLeft和pRight之外还有一个pNext指针用来指示自己的兄弟,形如下图。要求是写个代码搞定他,分析时间复杂度和空间复杂度?原创 2011-09-29 13:50:06 · 1823 阅读 · 1 评论 -
收费站与图中最短路径的问题
首先是一句牢骚:为什么国人写书就喜欢各种公式和符号,一定把这本书写的你看了半天都不知道是在说什么他才觉得成功呢?言归正传:问题描述:从图中的一个点,怎么找到和其它点距离最短的路径?这是一个很平常的问题,你去任何地方都会希望找到一个距离最短的道路,或者是不堵车(对应到计算机原创 2011-09-11 18:55:01 · 702 阅读 · 0 评论 -
平衡二叉树结点的插入
平衡二叉树是指左右子树的深度差不超过1的二叉树,通常用来优化二叉排序树。平衡二叉树在构建过程和结点插入过程中遵守这样的法则:1,如果想向某树的左子树的左子树插入结点导致失衡,那么如何平衡这棵树? 首先,这样一棵树肯定符合下图: (1)原创 2011-09-14 21:29:45 · 645 阅读 · 0 评论 -
二叉排序树的插入和删除
二叉排序树就是左子树的数字比树根小,右子树的数字比树根大的一颗二叉树。插入一个结点到这样的树里很简单。首先比它和根谁大,大往右找插入位置,小往左找插入位置。到了子树继续比和根谁大,如果大就往右找,如果小就往左找,这样递归到某个子树的根没有左子树或者右子树,如果小,就插原创 2011-09-14 14:58:44 · 345 阅读 · 0 评论 -
大数乘法运算
有一种可能的问题就是,两个巨大无比的整型数要做乘法。例如:1234567890*2234567890这样的乘法结果无论当前的哪一个数据类型都不能单独表示。于是,如果你遇到抽疯的面试官问你这样的问题,你可以这样做(假设只处理无符号数):第一步,将两个运算数从各位到最原创 2011-09-04 23:49:15 · 456 阅读 · 0 评论 -
作为一个C++新人,你能否回答得上来下面这道问题(对象构造,拷贝构造,析构函数相关)
# include using namespace std;class A{public: A() {cout<<"A constructor"<<endl;} ~A(){cout<<"A destructor"<<endl;}};原创 2011-09-02 18:59:52 · 467 阅读 · 0 评论 -
用循环数组解决数组移位问题
笔试也好,面试也罢,一种经常见到的问题就是我给你一个n个元素的数组,然后让你左移或者右移m个元素。比如 1 2 3 4 5 6 7 左移3个元素就是 4 5 6 7 1 2 3,跟2进制的移位差不多。解决这类问题有很多种办法,比如把数组切割为m个元素和n-m个元素两组,先原创 2011-09-26 15:47:22 · 2147 阅读 · 1 评论 -
各种排序算法总结
1. 直接插入排序,这没什么技术含量,每一次都在表里找到元素应该插入的位置然后把整个表的后续元素后移。这真没什么技术含量。2. 折半插入排序,就是用折半查找找到插入的位置,然后后移。3. 2路插入排序,这排序算法就是利用循环表,有一个循环表,刚开始表头和表尾都在表的下标0原创 2011-09-16 18:59:15 · 316 阅读 · 0 评论 -
不用if求两个有符号整数的最大值
面试啊,笔试啊,总有些让你觉得很蛋疼,很扯淡,很想骂娘的题目,比如这个。这时候怎么做?解题思路 1.求最大值,那么等于干这件事a - b > 0 则 return aelse return b那么我们想想,a - b .> 0 ,那不就意味着符号位原创 2011-09-04 10:51:58 · 489 阅读 · 0 评论 -
线索二叉树小记
首先,是这个玩意能干嘛用。树有三种遍历的方法1,先序(根左右)2,中序(左根右)3,后序(左右根)每一种遍历过后都会产生一个遍历序列,该序列中某一个节点n在各个遍历方式下的前驱与后继大多都不相同。现在考虑这样一个问题,如果你想找到某一个树节点n的先序遍历前原创 2011-09-04 10:23:03 · 307 阅读 · 0 评论 -
找第k大(小)的数
原帖地址:http://bbs.sjtu.edu.cn/bbstcon?board=Algorithm&reid=1187310487方法很巧妙。找一个标杆然后快排,快排后标杆把数组分成了两种,小于标杆的,大于标杆的,此外,标杆就恰好站在了它应该排列的位置上。如果标杆的下转载 2011-09-29 19:48:52 · 979 阅读 · 0 评论 -
百度2010年笔试题解答之“求一个字符串里最长连续字串”
我能想到的算法就是一个O(n)的算法,从字符串开头开始unsigned int nMaxContinuLen = 0;unsigned int nCurrentContinuLen = 1;先把第一个字符加入到一个临时结果串里 for(unsigned int i=原创 2011-09-26 01:59:01 · 1486 阅读 · 1 评论
分享