算法
akalius
这个作者很懒,什么都没留下…
展开
-
Java版归并排序
/** * author Akalius Kung 2008-2-5 **/public class MergeSort { public int[] sort(int[] data) { int[] temp=new int[data.length]; mergeSort(data,temp,0,data.length-1); ...2008-02-05 22:24:16 · 82 阅读 · 0 评论 -
google面试题(一)
有一个random number generator,是生成真实的随机数,而不是伪随机数,这个东西会生成几千亿个32位整数,打印出现次数前100的整数。方法一:由于数的范围已经确定,采用计数排序的方法计算出0-2^31-1间数的出现次数,如下代码所示:int[] array=new int[2^31-1];for i=0 to n-1 do { array[a[i]]++;...2008-02-11 01:27:08 · 180 阅读 · 0 评论 -
google面试题(二)
平面上N个点,求一条直线,穿过的点数最多思路:2点确定一条线,N个点共有n(n-1)/2条线,穿过的点数最多的直线,斜率相同的最多,因此只要找出相同斜率最多的点对集合,并且有公共点的即可方法一:用上三角矩阵,矩阵里的值为任意两点的斜率,上三角矩阵用数组a[0..n(n-1)/2]表示。问题就转化为求数组中相同数最多的并且有公共点的数,方法参照“[微软面试题]请把一个整形数组中重复的...2008-02-11 01:43:47 · 89 阅读 · 0 评论 -
google面试题(三)
算法题一:Given 1 GB memory, input a file which contians 4 billion integers,output one integer that is not in the file. What if you have only 10 MBmemory?算法题二:There are 100 hundred sorted arrays, a...2008-02-13 06:22:59 · 101 阅读 · 0 评论 -
Google面试题(四)
26个英文字母从新排序(未知的顺序alphabet),然后用这个位置的顺序给一组数据(array list)排序现在给你这组array list,问能不能计算出来那个alphabet未知的顺序。思路:拓扑排序就行0. 初始排序图[G]为单个点[0],[0]小于任何字母(添加[0]为了保证图的连通性,编程简单),[G]为有向图。1. 对于输入array [A],取每个串第一个...2008-02-13 22:07:35 · 185 阅读 · 0 评论 -
Google面试题(五)
几星期前,一个朋友接受了Google公司的面试,他透露了面试中的一些问题。顺便,我把从其他几个曾经面试过的人那里听来的内容也整理在一起。最大的互联网公司Google的一份面试题集,看看你是否能够回答出来。其中很多问题都是开放式的,正确的解答有许多种,所以在这里就不提供答案了。一辆学校班车里面能装多少个高尔夫球?你被缩小到只有硬币厚度那么点高(不是压扁,是按比例缩小),然后被扔到一个...2008-02-14 02:30:55 · 104 阅读 · 0 评论 -
Google面试题(六)
题目:对现在的Stack(栈)数据结构进行改进,加一个min()功能,使之能在常数,即O(1),时间内给出栈中的最小值。可对push()和pop()函数进行修改,但要求其时间复杂度都只能是O(1)。分析:要使pop,push,min都是O(1),所以肯定要牺牲点空间思路:1:在stack的数据结构中加两个个字段,如 typedef struct { ...2008-02-14 03:03:13 · 78 阅读 · 0 评论 -
Google面试题(七)
很多Google考生出来,也随之不少Google考试问答题目给释放出来,Google的面试题曾经一度在网络上被粉丝和网民炒得很火热,这些题目被曝光也不止一次了。说实话,如果Google还有点脑子的话,肯定会更换题目了。所以本次研究不是为了那些面试者而开设。只是出于粉丝们来了解Google的一个组成部分,今天我去网上好好的搜罗了一下,如果你搜索题目,想找到答案似乎是很难的事情:发现大部分都是转载Go...2008-02-14 03:35:52 · 113 阅读 · 0 评论 -
数据结构面试大全
1.判断链表是否存在环型链表问题:判断一个链表是否存在环,例如下面这个链表就存在一个环:例如N1->N2->N3->N4->N5->N2就是一个有环的链表,环的开始结点是N5这里有一个比较简单的解法。设置两个指针p1,p2。每次循环p1向前走一步,p2向前走两步。直到p2碰到NULL指针或者两个指针相等结束循环。如果两个指针相等则说明存在环。 struct link { i...2008-02-19 12:50:29 · 99 阅读 · 0 评论 -
面试题集锦
1. 时针分针重合几次表面上有60个小格,每小格代表一分钟,时针每分钟走1/12小格,分针每分钟走1小格,从第一次重合到第二次重合分针比时针多走一圈即60小格,所以60/(1-1/12)=720/11每隔720/11分才重合一次(而并不是每小时重合一次)1440里有22个720/11,如果说算上0点和24点,那也是重合23次而已,但我觉得0点应该算到前一天的24点头上,所以...2008-09-29 17:24:04 · 127 阅读 · 0 评论 -
关于后缀树的一些理解
要理解suffix tree就首先要理解Trie还好我在刚进雅虎的时候接触到了Double Array Trie的一个具体实现对Trie有着比较深刻的了解。Trie的优势就是他能在o(n)时间内搜索一个长度为n的字符串s是否在字典里。关于Trie的资料,有下面几个链接可以参考http://www.allisons.org/ll/AlgDS/Tree/Trie/http://...2008-10-01 21:07:14 · 295 阅读 · 0 评论 -
Google面试题(九)
25匹马赛跑,5个跑道,怎么以最少的比赛次数来决出最快的3匹,马跑的时间未知,只知道马的先后顺序.思想:(1)25匹马分为5组,进行5次赛跑;(2)由5组第一再跑一次,这样可以选出所有马最快的那匹;(3)由最快的那匹的分组中的第二匹、第三匹和步骤(2)中的第一匹,第二匹,以及步骤(2)中的第三快,共五批马再跑一次总共比赛7次...2008-02-20 00:13:08 · 125 阅读 · 0 评论 -
词频统计的C++实现
#include #include #include #include using namespace std; void display_map(map &wmap); int main() { const char *szInputFi...2008-03-10 16:01:56 · 831 阅读 · 1 评论 -
数据结构和算法中容易忽略的要点总结[未完待续]
1。递归需要有个递归出口,否则会是infinite的递归2008-02-10 23:44:49 · 96 阅读 · 0 评论 -
矩阵求逆的快速算法
算法介绍矩阵求逆在3D程序中很常见,主要应用于求Billboard矩阵。按照定义的计算方法乘法运算,严重影响了性能。在需要大量Billboard矩阵运算时,矩阵求逆的优化能极大提高性能。这里要介绍的矩阵求逆算法称为全选主元高斯-约旦法。高斯-约旦法(全选主元)求逆的步骤如下:首先,对于 k 从 0 到 n - 1 作如下几步: 从第 k 行、第 k 列开始的右下角子...2008-02-10 20:40:21 · 1275 阅读 · 0 评论 -
约瑟夫问题
有n个人围成一圈,顺序编号。从第一个人开始报数,凡报到m的人退出圈子,问最后一个圈中的人的编号。import java.util.LinkedList;/** * author Akalius Kung 2008-2-10 **/public class Josephus { private static int removeNM(int n, int m) {...2008-02-10 09:57:50 · 116 阅读 · 0 评论 -
Java版快速排序
/** * author Akalius Kung 2008-2-5 **/public class QuickSort { /** * @param args */ public static void main(String[] args) { int[] datas={1,21,34,79,98,23,68,2,3,8,6,33,6,7,87,3...2008-02-05 23:52:08 · 108 阅读 · 0 评论 -
数组第k小的元素
要求复杂度在O(n)kua方法:使用分治策略,类似与快速排序的方法,先对数组分组,然后判断第k小的元素应该在哪个分组然后递归该分组,最后求的第k小的元素/*使用分段的思想求第k小的数(减治法)如:第1小的数是最小的数思想:对于一个数组a[0...n-1],分段成a[0...s-1],a[s],a[s+1...n-1]分组后,a[0...s-1]里面的元素...2008-02-06 04:47:13 · 186 阅读 · 0 评论 -
[转]芯片测试题型
有n个人,其中超过半数是好人,剩下的是坏人好人只说真话,坏人可能说真话也可能说假话这n个人互相都知道对方是好人还是坏人现在要你从这n个人当中找出一个好人来,只能通过以下方式:每次挑出两个人,让这两个人互相说出对方的身份,你根具两个人的话进行判断。问通过何种方法才能最快的找出一个好人来,(要考虑最坏的情况)算法分析:(1)好人+好人---好人,好人(2)好...2008-02-06 14:34:57 · 178 阅读 · 0 评论 -
求数组平衡点的问题
整形数组平衡点问题:平衡点指左边的整数和等于右边的整数和,求出平衡点位置,要求输入的数组可能是GB级算法分析:1)如果可以使用高精度数字,那就先求出数组的数字总和,然后从数组左端开始累加,找到其和等于数组总和1/2倍的子数组,此子数组的长度就是一个平衡点。比如数组为 [2, 1, 3, -4, 1, 3],那么求出平衡点为2和5,表示数组左边两个数字之和等于右边6-2个数字之和;数...2008-02-06 17:42:11 · 656 阅读 · 0 评论 -
[转]满足ai * aj = ak的最大值
给定一个正整数集合 s = {a1, a2, ..., an},存在ai * aj = ak, i != j != k试找出满足上述条件的最大数ak,如果不存在满足上述条件的三个数,则输出-1算法分析:1. 不排序,先利用找最大算法找出第一大的值Max2. 然后利用Max的平方根r作为划分标准将集合s划分为两部分A、B。使得A中小于r,B中大于r3. 令|A|=a, |...2008-02-07 03:38:03 · 831 阅读 · 0 评论 -
求逆序对的个数
其实就是二路归并排序,排序的同时记录交换次数就行了。public class ReversalCount { private int[] array = null; private int[] tempArray = null; public ReversalCount(int[] array) { this.array = array; ...2008-02-08 02:00:38 · 371 阅读 · 0 评论 -
Java版N皇后算法
回溯法,代码如下:/** * author Akalius Kung 2008-2-8 **/public class Queen { private int[] grids; // location in each row, index is each row, array value is location of each queen private int n...2008-02-08 04:58:26 · 189 阅读 · 0 评论 -
Java版插入排序
/** * author Akalius Kung 2008-2-9 **/public class InsertionSort { private int[] sort(int[] array){ for(int j=1;j=0;i--){ // get the location where to insert if(array[i]>array[j]){...2008-02-09 04:40:31 · 72 阅读 · 0 评论 -
Java版堆排序
/** * author Akalius Kung 2008-2-9 **/public class HeapSort { private int heapLen; private int[] sort(int[] array){ heapLen=array.length; buildHeap(array); // init the heap f...2008-02-09 23:41:59 · 87 阅读 · 0 评论 -
[微软面试题]请把一个整形数组中重复的数字去掉
请把一个整形数组a中重复的数字去掉方法一: for i=0 to n-1 do { hashtable.put(a[i],i); } for i=0 to hashtable.size-1 do { a[i]=hashtable.get[i]; }时间复杂度:O(n),空间复杂度:O(n)方法二: e=findMax(a...2008-02-10 04:08:46 · 158 阅读 · 0 评论 -
突然发现没真正领悟哈希表
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。 看到这道题时,最直观的想法是从头开始扫描这个字符串中的每个字符。当访问到某字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符相比较,因此这种思路时间复杂度是O(n2)。我们试着去找一个更快的方法。...2008-02-10 05:11:04 · 174 阅读 · 0 评论 -
hash函数学习总结,以及与hashcode()、hashMap的关系
以前一直觉得hash函数很深奥,上王珊的《数据库实现原理》的时候,似乎明白了一点点,但是到学java的时候,频繁接触到hashcode(),hashMap这些,就总在想这三者之间有关系吗?hash函数是什么?hashcode(),hashMap和hash函数又有什么关系呢?今天终于对这个问题有了初步的学习和理解:1.什么是hash函数:1)来自:http://beyon...2008-02-10 06:21:33 · 335 阅读 · 0 评论 -
求交集和并集的线性算法
对于给定的两个集合,使用哈希表可以在线性时间复杂度内得到他们的交集和并集,具体说明如下:假设有集合A={1, 7, 5, 13, 9, 10, 11}, B={5, 7, 10, 1, 18, 12},1)求交集,需要得到结果:A∩B={1, 5, 7,10} 思路如下: ①建立一个哈希表(HashTable),其键(KEY)表示集合中数字的值,其值(VAL...原创 2011-10-24 23:00:42 · 468 阅读 · 0 评论