所谓的BitMap就是用一个bit位来标记某个元素所对应的value,而key即是该元素,由于BitMap使用了bit位来存储数据,因此可以大大节省存储空间. public class Test { //为了方便,假设数据是以数组的形式给我们的 public static Set<Integer> test(int[] arr) { //用来把重复的数返回,存在Set里,这样避免返回重复的数. Set<Integer> output = new HashSet<>();…
前两天面试3面学长问我的这个问题(想说TEG的3个面试学长都是好和蔼,希望能完成最后一面,各方面原因造成我无比想去鹅场的心已经按捺不住了),这个问题还是建立最小堆比较好一些. 先拿10000个数建堆,然后一次添加剩余元素,如果大于堆顶的数(10000中最小的),将这个数替换堆顶,并调整结构使之仍然是一个最小堆,这样,遍历完后,堆中的10000个数就是所需的最大的10000个.建堆时间复杂度是O(mlogm),算法的时间复杂度为O(nmlogm)(n为10亿,m为10000). 优化的方法:可以把…
import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; //请在小于99999的正整数中找符合下列条件的数,它既是完全平方数, //又有两位数字相同,如:144,676. public class wqs { //完全平方数 public static boolean iswqs(int n){ int i; double dn=Math.sqrt(n); if(dn-(int)dn==0) retu…
我们面临的问题有以下两点:1)数据量太大,无法在短时间内解决:2)内存不够,没办法装下那么多的数据.而对应的办法其实也就是分成1)针对时间,合适的算法+合适的数据结构来提高处理效率:2)针对空间,就是分而治之,将大数据量拆分成多个比较小的数据片,然后对其各个数据片进行处理,最后再处理各个数据片的结果.原文中也给出一个问题,"从3亿个ip中访问次数最多的IP",就试着来解决一下吧.1)首先,生成3亿条数据,为了产生更多的重复ip,前面两节就不变了,只随机生成后面的2节. private…
题目描述 给定 a.b 两个文件,各存放 50 亿个 URL,每个 URL 各占 64B,内存限制是 4G.请找出 a.b 两个文件共同的 URL. 解答思路 每个 URL 占 64B,那么 50 亿个 URL占用的空间大小约为 320GB. 5, 000, 000, 000 * 64B ≈ 5GB * 64 = 320GB 由于内存大小只有 4G,因此,我们不可能一次性把所有 URL 加载到内存中处理.对于这种类型的题目,一般采用分治策略 ,即:把一个文件中的 URL 按照某个特征划分为多个小…
一道百度面试题(待解中) 具体:给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中? 分析下,首先应该是空间复杂度(40亿uint = 400000000*4 byte = 15258 MB 差不多16G), 再试时间复杂度 因为是无序的,所以 不能用B树索引,B+ 树索引 ( 默认数据库中 索引会用, 因为有序,所以支持 上一个,下一个) 网上普遍应该是 1.40亿数据 分片 2.结果放到bit中,然后查找bitset 判断…
int a[] = {1,3}; int b[] = {1,3,5}; int size = a.length>b.length ?a.length:b.length; int valueA =0 ; int valueB =0; for(int i =0;i<size;i++){ int tempA =1; int tempB =1; if(i<a.length){ valueA += tempA << a[i]; valueB += tempB << b[i]…
这几天小秋去面试了,不过最近小秋学习了不少和位算法相关文章,例如 [面试现场]如何判断一个数是否在40亿个整数中? [算法技巧]位运算装逼指南 对于算法题还是有点信心的,,,,于是,发现了如下对话. 20亿级别 面试官:如果我给你 2GB 的内存,并且给你 20 亿个 int 型整数,让你来找出次数出现最多的数,你会怎么做? 小秋:(嗯?怎么感觉和之前的那道判断一个数是否出现在这 40 亿个整数中有点一样?可是,如果还是采用 bitmap 算法的话,好像无法统计一个数出现的次数,只能判断一个数是…
题目 Being unique is so important to people on Mars that even their lottery is designed in a unique way. The rule of winning is simple: one bets on a number chosen from [1,10​4 ]. The first one who bets on a unique number wins. For example, if there ar…
/* 1,hash散列 2,找到每个块出现次数最多的(默认出现均匀)—–>可以用字典树 3,在每个块出现最多的数据中挑选出最大的为结果 */ 问题一: 怎么在海量数据中找出重复次数最多的一个 算法思想: 方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数. 然后找出上一步求出的数据中重复次数最多的一个就是所求(如下). 问题二: 网站日志中记录了用户的IP,找出访问次数最多的IP. 算法思想: IP地址最多有2^32=4G种取值可能,所以不能完全加载到…