38 百度面试 天平,url等

来源:互联网 发布:js获取指定日期前一天 编辑:程序博客网 时间:2024/05/20 21:42
/*百度面试:1.用天平(只能比较,不能称重)从一堆小球中找出其中唯一一个较轻的,使用 x  次天平,最多可以从 y  个小球中找出较轻的那个,求 y  与 x  的关系式。2.有一个很大很大的输入流,大到没有存储器可以将其存储下来,而且只输入一次,如何从这个输入流中随机取得 m  个记录。3.大量的 URL  字符串,如何从中去除重复的,优化时间空间复杂度*/ /*1.记住是唯一较轻的,只有一个每次分三份,a,b,c称ab;如果a=b,则轻的在c中,否则在ab小的那堆中所以y=3^x 2.所有的个数N,N<m,保存所以的,N>m: 用一个N,rand的随机数,R=rand(N),如果R在[0,m]区间,置换,否则丢弃不管 ; 或者 用大小为m的数组arr[0:m-1]来保存随机抽取的元素 arr[0:m-1]逐步初始化为输入流的前m个元素的一个随机排列。对于输入流中的第k (k>m)个元素,后面元素,随机生成一个[0,k-1]区间内的整数i,如果此随机整数i小于等于m,那么就用第k个元素覆盖掉arr[i-1],否则,丢弃第k个元素。3.用hash1. 内存够用,非常大,将URL存入hash链表,每个URL读入到hash链表中,遇到重复的就舍弃,否则加入到链表里面,最后遍历得到所有不重复的URL。空间复杂度M,时间复杂度为O(N+N/M),M为不重复的URL,N为总URL数 2. 为了解决内存可能不足的问题,需要把hash链表变化成普通的hash表,每个hash表元素指向一个文件,这个文件记录了所有该hash值对应的无重复的URL,那么在加入URL的时候就遍历对应文件中的URL,没有重复则加入到文件中。但是每次都要读写文件,消耗的时间应该是上一种方式的三倍(依赖于io速度),而对内存的要求比较小。一个改进是加入URL的时候进行排序,这样能减少比对的次数。 */ 

0 0