寻找不在集合中的整数

给定一个集合,里面的数是从0到4G的,给出有效的算法来得到一个不在这个集合中的整数。
如果只有640MB的内存,又该怎么求?

对于第一个情况,可以利用external的buffer来解决。设置一个长为4G的数组,每个元素代表从0到4G的一个整数。遍历给定集合,如果遍历到的数在0和4G之间,就在数组的相应位置计数。

遍历完一遍后,遍历数组,返回第一个值为0的元素。

如果只有640MB的内存,上述方法不好使,因为4G=2^32,而640MB=10*2^29。

可以设置n个counter,每个counter代表一段数,比如,每个counter代表10000个数。然后遍历集合,对于每个数,如果在相应的数的范围里,就把这个相应的counter加一。这样,遍历过一次就知道哪个范围里缺数了。
然后再遍历一次,这次和第一种方法类似,只不过将数的范围定为相应的范围,而不在这个范围里的,都可以忽略。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值