分享

今天去面试的笔试题

songyl525 发表于 2015-1-9 21:40:38 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 21 55706
5G的7位电话号码,去重,内存20mb,代码实现。

谁有好的思路,请代码实现
我的答案稍后给出

已有(21)人评论

跳转到指定楼层
starrycheng 发表于 2015-1-9 22:03:38
膜拜一下,跪求大神答案。等熟练了,一定试试
回复

使用道具 举报

muyannian 发表于 2015-1-9 22:39:54
内存20M,spark是不是有点低。
可以试试hive或则mapreduce
回复

使用道具 举报

langke93 发表于 2015-1-9 23:20:45
去重方法很多,楼主可以说下题目的是怎么约定的。
咱们网站去重就有很多
MapReduce初级案例(1):使用MapReduce去重

pig数据去重实例


回复

使用道具 举报

nextuser 发表于 2015-1-10 11:50:13
内存20M楼主是什么意思?是说分配给程序20M?这个内存显然不对啊。是不是在考楼主另外的能力。20M什么也干不了吧
回复

使用道具 举报

songyl525 发表于 2015-1-10 22:14:37
答案:
首先,这个题考的不是分布式
7位数,至少要用int来保存,那么int为4字节,20MB内存 10^7*4/1024*1024=38.14697265625  至少需要38MB,显然7位的数字不能全部保存
保存一个数字不能用4字节,要用2字节或1字节,那么只能用short或byte,但是short最大65536,byte最大256,不能满足。
思路:
不管电话号码存在不存在,所有的电话号码一共有10^7个
建立一个byte类型的数组,数组大小为10^7,共需要10^7*1/1024*1024=9.5MB的内存
数组的每个下标对应一个电话号码,数组的值代表是否重复,初始化的时候让数组里的每个值都为0,读到一次设为1,读到多次设2,那么值为1的就是去重后的号码。
代码:
  1. public class SortTest {       
  2.         public static void main(String[] args) {
  3.                 int[] a = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 1,38,65 };
  4.                 System.out.println("去重前...");
  5.                 printSort(a);
  6.                 byte[] ret = new byte[10000000];
  7.                 for(int i=0;i<a.length;i++){
  8.                         if (ret[a[i]] == 0)
  9.                                 ret[a[i]] = 1;
  10.                         else if (ret[a[i]] == 1)
  11.                                 ret[a[i]] = 2;
  12.                 }
  13.                 System.out.println("去重后...");
  14.                 for(int i=0;i<ret.length;i++){
  15.                         if(ret[i]==1)
  16.                                 System.out.print(i + " ");
  17.                 }
  18.         }       
  19.         public static void printSort(int[] a){               
  20.                 for (int i = 0; i < a.length; i++) {
  21.                         System.out.print(a[i] + " ");
  22.                 }
  23.                 System.out.println();
  24.         }
  25. }
复制代码

回复

使用道具 举报

lixiaoliang7 发表于 2015-1-11 08:56:23
学习了。学习了。
回复

使用道具 举报

cochou 发表于 2015-1-12 16:25:44
回复

使用道具 举报

cheney 发表于 2015-1-14 16:45:13
回复

使用道具 举报

ainubis 发表于 2015-2-4 19:49:29
回复

使用道具 举报

123下一页
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条