当前位置: 首页 > 编程日记 > 正文

求几亿个数中不重复元素的个数

题目:

有2.5亿个无符号整数(但在文件里面),要求找出这2.5亿个数字里面,不重复的数字的个数(那些只出现一次的数字的数目);另外,可用的内存限定为600M;要求算法高效、最优。

思路:

这么多个数字,全部读到内存里面肯定不行的,那么就要读一些处理一些。试想用一个标志的数组,里面放的是true或者false,表示一个数字是否是第一次被读到,最好能够把这个数字就当做数组的下标来访问这个标志,比如读到234432,看flag[234432]是true还是false,这样就很方便了(这和哈希的思想不是挺类似的嘛)。

好了,那么现在主要矛盾在这个flag标志数组该如何定义上了。无符号int,大小从 0 到 2^32 - 1(4字节的话),那么要保证数组足够大以至于能够用下标 2^32 - 1 来访问这个数的标志。true或false,那么也只要一位就够了,那么这个flag数组有多大呢:

2^32 个bit 也就是 2^29 byte 也就 2^19 kb 也就 2^9 M 也就 512 M。这个大小小于600M,那么就内存来说是可以的。

代码:

 1 #include <iostream>
 2 #include <fstream>
 3 #include <cstdlib>
 4 #include <bitset>
 5 
 6 using std::cin;
 7 using std::cout;
 8 using std::endl;
 9 
10 int main(void)
11 {
12     const unsigned int thisIntMax = 0xffffffff;            //无符号int最大值,我的机子int是4字节
13 
14 #ifdef GENETATE_DATA
15     //生成很多值,其实这里太多了
16     std::ofstream fout("src.txt");
17     for (unsigned int i = 0; i < thisIntMax; i++)
18     {
19         unsigned int temp = std::rand();
20         fout << temp << endl;
21     }
22 #endif
23 
24     std::bitset<thisIntMax>* pArr = new std::bitset<thisIntMax>;            //默认值都是0,所以不要设置值了
25     std::ifstream fin("src.txt");
26     unsigned int temp, allCnt = 0, cnt = 0;
27 
28     while (fin >> temp)
29     {
30         allCnt++;
31         if (false == pArr->at(temp))            //注意这里要用at
32         {
33             cnt++;
34             pArr->set(temp);            //设为1
35         }
36         else
37         {
38             cout << temp << endl;
39         }
40         if (10000 == allCnt)
41             break;
42     }
43     cout << "Results:\n" << allCnt << endl << cnt;
44     delete pArr;
45     cin.get();
46 }

结果:

总结:

用位来表明一个数是否出现过。

直接把数字当做位数组的下标来进行访问。

转载于:https://www.cnblogs.com/jiayith/p/3936969.html

相关文章:

进一步提升用户信息安全保护意识 小米安全与隐私宣传月完满落幕

6月29日&#xff0c;第二届小米安全与隐私宣传月活动完美落幕。活动通过多形式、多层次、全方位展示了小米在信息安全与用户隐私保护方面的实践和成就&#xff0c;进一步提升小米全体员工保护消费者个人信息的安全意识&#xff0c;为小米全线产品的安全防护水平奠定基础。 闭幕…

已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。

已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法&#xff0c;找出a跟b中数据的大者。答案&#xff1a; int max(int a,int b){return (ababs(a-b))/2;}类似的 请定义一个宏&#xff0c;比较两个数a、b的大小&#xff0c;不能使用大于、小于、if语句 答案&#xff1…

flume源码学习8-hdfs sink的具体写入流程

上一篇说了HDFSEventSink的实现&#xff0c;这里根据hdfs sink的配置和调用分析来看下sink中整个hdfs数据写入的过程&#xff1a; 线上hdfs sink的几个重要设置 12345678hdfs.path hdfs://xxxxx/%{logtypename}/%Y%m%d/%H&#xff1a; hdfs.rollInterval 60 hdfs.rollSize 0…

详解zabbix中文版安装部署

一、zabbix简介&#xff08;摘自百度百科&#xff09;zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供柔软的通知机制以让系统管理员快速定位/解决存在…

赠书 | 图解机器学习算法,看这文就够了!

机器学习指的是计算机根据给定的问题、课题或环境进行学习&#xff0c;并利用学习结果解决问题或课题等的一整套机制&#xff08;图 1-1&#xff09;。 图 1-1 分类的示意图与机器学习共同成为热门话题的还有人工智能和深度学习。这里梳理一下它们之间的关系&#xff08;图 1-…

C#获得文件版本信息及只读文件的删除

获取文件的版本信息: FileVersionInfo myFileVersionInfo1 FileVersionInfo.GetVersionInfo("D://TEST.DLL"); textBox1.Text"版本号: " myFileVersionInfo1.FileVersion; 更改文件属性&#xff0c;删除只读文件&#xff1a; 下例欲将E:/test.txt文件…

组策略 从入门到精通(二) 如何区别跨越WAN网的计算机对组策略的套用

如果客户机与DC中间跨越了网络&#xff0c;造成传输速率慢的情况&#xff0c;我们希望通过策略中的一些元素&#xff0c;达成对这些计算机的另类处理。但我们并不知道这些计算机哪些与我们DC之间属于低速连接&#xff0c;哪些属于高速连接&#xff0c;那么我们要如何通过组策略…

插入记录时单引号的处理

由于Content, Title中可能包含单引号&#xff0c;直接使用sql的insert命令会报错&#xff0c;对此有两种处理方法&#xff0c;一种将单引号替换成两个单引号&#xff0c;第2种方法是使用存储过程。 表myBBS的格式定义如下&#xff1a; CREATE TABLE [dbo].[myBBS] ( [ID] [bi…

仅用 480 块 GPU 跑出万亿参数!全球首个“低碳版”巨模型 M6 来了

继今年 3 月阿里达摩院发布国内首个千亿参数多模态大模型 M6&#xff08;MultiModality-to-MultiModality MultitaskMega-transformer&#xff0c;以下简称 M6&#xff09; 之后&#xff0c;6 月 25 日&#xff0c;达摩院宣布对 M6 进行全新升级&#xff0c;带来“低碳版”巨模…

怎样将jpg转换成pdf软件

为什么80%的码农都做不了架构师&#xff1f;>>> 怎样将jpg转换成pdf软件 序言&#xff1a; 企业或个人通常会遇到设备终端软件的兼容性和支持性问题&#xff0c;比如&#xff0c;JPG转PDF文本&#xff0c;这给等于给用户设置了一个门槛&#xff0c;遇到需要将JPG转换…

二叉树的层次遍历 II

给出一棵二叉树&#xff0c;返回其节点值从底向上的层次序遍历&#xff08;按从叶节点所在层到根节点所在的层遍历&#xff0c;然后逐层从左往右遍历&#xff09; 样例 给出一棵二叉树 {3,9,20,#,#,15,7}, 3/ \9 20/ \15 7 按照从下往上的层次遍历为&#xff1a; [[15,7],[…

jquery autocomplete实现solr查询字段自动填充并执行查询

2019独角兽企业重金招聘Python工程师标准>>> 页面引入三个JS&#xff1a; <script type"text/javascript" src"js/jquery-1.7.2.js"></script> <script type"text/javascript" src"js/jquery-ui.js">&l…

C#使用CDO发送邮件

可以引用的COM组件列表&#xff0c;发现里面有一个名为Microsoft CDO For Exchange 2000 Library的COM组件&#xff0c;就是这个&#xff0c;我们可以用它来连接SMTP Server&#xff0c;使用用户名/密码验证发送邮件。 下面是实现的一个例子&#xff1a; Smtp Server使用的Smtp…

干货 | 当 YOLOv5 遇见 OpenVINO,实现自动检测佩戴口罩

YOLOv5网络YOLOv5代码链接&#xff1a;https://github.com/ultralytics/yolov5YOLOv5 于2020年6月横空出世&#xff01;一经推出&#xff0c;便得到CV圈的瞩目&#xff0c;目前在各大目标检测竞赛、落地实战项目中得到广泛应用。 YOLOv5在COCO上的性能表现&#xff1a;YOLOv5一…

Ubuntu 16.04安装双显卡驱动方法收集

说明&#xff1a;不一定有效&#xff0c;要不断尝试。 http://www.linuxwang.com/html/2150.html http://blog.csdn.net/feishicheng/article/details/70662094>如有问题&#xff0c;请联系我&#xff1a;easonjim#163.com&#xff0c;或者下方发表评论。<

C#中的类型转换

C# 出来也有些日子了&#xff0c;最近由于编程的需要&#xff0c;对 C# 的类型转换做了一些研究&#xff0c;其内容涉及 C# 的装箱/拆箱/别名、数值类型间相互转换、字符的 ASCII 码和 Unicode 码、数值字符串和数值之间的转换、字符串和字符数组/字节数组之间的转换、各种数值…

解构 StyleCLIP:文本驱动、按需设计,媲美人类 P 图师

来源 | HyperAI超神经&#xff08;ID:HyperAI&#xff09;作者 | 神经三羊StyleCLIP 是一种新型「P 图法」&#xff0c;它结合了 StyleGAN 和 CLIP&#xff0c;可以仅依据文本描述&#xff0c;对图像进行修改和处理。提起 StyleGAN 大家都不陌生。这个由 NVIDIA 发布的新型生成…

nexus 4 下 DualBootInstallation 安装 ubuntu touch

最近折腾ubuntu for phone ubuntu也算是雷声大雨点小&#xff0c;从edge手机开始&#xff0c;到说兼容一大部分谷歌机&#xff0c;到现在缩水说只适配nexus 4 节操掉了一地啊&#xff0c;对付这种情况&#xff0c;ubuntu touch也就可以只装着玩玩了&#xff0c;还好ubuntu 官方…

我的家庭私有云计划-13

嗯&#xff0c;昨天算由感而发啊&#xff0c;大家看看就好了。 嗯&#xff0c;接着说咱们的云。 先说啊&#xff0c;我没打算在这个领域里面完全自研&#xff0c;我还没那么疯&#xff0c;这个呢属于一体化解决方案&#xff0c;我认为还是社会分工合作的结果&#xff0c;不强调…

C语言return函数

return函数 说到return,有必要提及主函数的定义。很多人甚至市面上的一些书籍&#xff0c;都使用了void main( )这一形式 &#xff0c;其实这是错误的。 C/C 中从来没有定义过void main( ) 。C 之父 Bjarne Stroustrup 在他的主页上的 FAQ 中明确地写着&#xff1a; The defi…

怎样写出一个较好的高速排序程序

写出一个较好的高速排序程序 高速排序是经常使用的排序算法之中的一个&#xff0c;但要想写出一个又快又准的使用程序&#xff0c;就不是那么简单了须要注意的事项 首先要写正确。通常使用递归实现。其递归相当于二叉树展开&#xff0c;因此假设要用迭代实现的话须要使用一个队…

写代码时发现......还得是 SpringBoot !一篇拿下

关注了很多技术类公众号的读者肯定有这样一个感受&#xff0c;SpringBoot相关的文章铺天盖地&#xff0c;并且SpringBoot相关的文章阅读量、收藏量都很高&#xff0c;这也从侧面反映了SpringBoot技术的火爆。一切都在证明&#xff0c;SpringBoot已经成为了Java程序员必备的技能…

Python的 if .else.elif语句详解

If 语句 是用来判断的 Python 编程中 if 语句用于控制程序执行 用来检测一个条件&#xff1a;如果条件为 &#xff08;真&#xff09;true&#xff0c;就会运行这个语法块&#xff0c;如果为Fales 就跳过不执行。 elif是依附于if存在的&#xff0c;两者之间的运算逻辑相同&…

C#中string与byte[]的转换帮助类

在写C&#xff03;程序时&#xff0c;string和byte[]之间的转换比较烦&#xff0c;在移植一些老程序时感觉很不好。我在C&#xff03;中使用DES和TripleDES时移植一块老代码时也遇到了同样的情况。为了下次不为同样的事情烦恼&#xff0c;就写了下面的帮助类。 主要实现了以下…

鲲鹏入晋 万里腾飞,鲲鹏应用创新大赛2021山西赛区邀你来战!

2021 年 6 月 29 日&#xff0c;由山西省工业和信息化厅、山西转型综合改革示范区管理委员会为指导单位&#xff0c;华为技术有限公司主办&#xff0c;山西鲲鹏生态创新中心暨华为&#xff08;山西综改区&#xff09;DevCloud 创新中心承办&#xff0c;山西长河科技股份有限公司…

tcpdump-根据IP查看程序与服务都用了哪些端口

tcpdump -i em1 -tttt src 116.3.248.157 and port ! 6869 -nn -i 指定端口 -tttt 附带时间戳 -nn 解析域名与端口信息 ############################################# windows下可以使用netstat -nb |find “18999” 与 netstat -ao 结合使用&#xff0c;在通过pid号 查看进程…

快速构建Windows 8风格应用27-漫游应用数据

本篇博文主要介绍漫游应用数据概览、如何构建漫游应用数据、构建漫游应用数据最佳实践。 漫游应用数据概览 1.若应用当中使用了漫游应用数据&#xff0c;用户可以很轻松的在不同的设备间保持应用数据的同步。 2.Windows会将更新的漫游数据同步到云端&#xff0c;并将数据更新到…

jquery和css3打造超梦幻的三维动画背景

今天为大家带来的是一款由jquery和css3实现的超级梦幻的背景效果。绿色的小原点由远到近&#xff0c;由近到远一种飞跃效果。效果非常好看&#xff0c;我们一起看下效果图&#xff1a; 在线预览 源码下载 我们一起看下实现的代码。这是一款由jquey和css3实现的效果。这里引用…

C#时间函数扩展

//本周是本年第几周 private int DatePart(System.DateTime dt) { int weeknow Convert.ToInt32(dt.DayOfWeek);//今天星期几 int daydiff (-1) * (weeknow1);//今日与上周末的天数差 int days System.DateTime.Now.AddDays(daydiff).DayOfYear;//上周末是本年第几天 i…

“我被机器解雇了!”Amazon 63岁员工因算法评分太低被自动开除

整理 | Carol出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;“我被一个机器解雇了。”63岁“老司机”因跟踪算法被开除一觉醒来&#xff0c;63岁的斯蒂芬 诺曼丁&#xff08;Stephen Normandin&#xff09;发现自己居然被莫名其妙解雇了。斯蒂芬是Amazon Flex的一…