14-大数据题目(资源限制类题目)的解题技巧

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAUG5KZz8=,size_20,color_FFFFFF,t_70,g_se,x_16

 

1、题目一

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAUG5KZz8=,size_20,color_FFFFFF,t_70,g_se,x_16

进阶:如果是只有3kb的内存,怎么找出一个没出现过的数?

设置一个int数组,一个位置的内存大小数4b,一共分3000/4分,向下取2的9次方即512,即设置一个数组为int[512],对42亿个数字分成42亿/512,如果一个数出现一次,在对应的数组位置词频++,找到没有满的词频,继续在数组上int[512]上进行词频统计,周而复始。

进阶:如果只用几个变量,怎么找出一个没出现过的数?

对42亿个数进行二分,哪一边没满的就继续进行二分。

2、题目二

 补充问题解题:利用堆的技巧:每个小文件里形成堆,再把每个文件的堆顶组成一个堆

 3、题目三:

 补充问题解题:先看10kb能实现多大的无符号整型数组?一个无符号整数是4kb,所以可以有10kb/4kb=2.5kb即2500个长度,然后找出2的多少次方离2500最近,找到2048即2的11次方,即一共分成2^11方个组,设置一个int[2048的数组,]对2^32次方个数遍历,然后用2^32/2^11表示每个组的范围是多大,然后属于哪个组哪个组就++,为了找出中位数就是把每个组的词频相加刚好加到或者超过2^32/2。

4、题目四:

 五、题目五:

有一个10G文件,里面每一行都是一个有符号整数,无序,如果你只有5G的内存,如何输出一个新的文件并且变得有序

有一个小根堆,记录的是:X,4个。每一条记录8字节,小根堆根据数值X组织。小根堆可以存储5G/16字节条数据,(16是因为除了本身一条记录占了8字节内存,其他索引空间可能也占了内存),支持5*2^26次方条记录,最接近为2^27,有符号整数的范围是2^32次方,等分2^5份,每份范围为2^27,建立小根堆,过一遍大文件的数,但是只关心属于-2^31~-2^31 + 2^27 -1这个范围的数,如果不是就忽略。过往一遍之后小根堆上就记录了-2^31~-2^31 + 2^27 -1这个范围的词频情况,并且是按照小根堆组织的。

六、题目六:

判断一个32位正数是不是2的幂、4的幂 

解:2的幂的条件是二进制中只有一个1。

4的幂:先判断是不是2的幂,如果是2的幂(只有一个1),那么判断4的幂的特征:1的位置在0、2、4这些位上。跟0101010101....0101与,如果等于0就是4的幂​​​​​​​

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值