当前位置: 首页 > news >正文

在一个大数组中有且仅有两个数相同,怎样尽快找出这两个数(未完成)

//采用位图的方法,如果是在一个1000万大的数组中,其中只有两个数是相同的,可以在O(n)时间复杂度内找出相同的数
//数组b是一块连续内存区域,用数组中的每一bit表示一个数是否存在,1表示存在,0不存在,比如,给定一个数字1025,
//那么,就把b数组的第1025bit置为1,基本思想就是用数组内存的一个bit所在的下标值作为数据数值,而不用真正去储存这个值,用下标作为值,节省空间。
//因为操作系统内存最小操作单位是字节,所以不能直接操作bit,因此,首先,必须找到第1025bit所在的字节,就是1025/8(因为下标是从0开始,整除截断的无关紧要,下步用到),
//然后再找出1025在该字节的哪一bit,就是1025%8=1,整个意思就是,1025在b数组的第1025/8个字节的第1 bit中,然后用&操作访问该bit是否为1,为1则表明1025存在了.
#include <stdio.h>
int a[3]={1,10000000,10000000};
//char类型为8位,共需要10000000/8个char
static unsigned char b[10000000/8+1];
int i;
void main() {
    for (i=0;i<3;i++) {
		//1<<(a[i]%8)表示1左移余数的位数即为a[i]在b中对应的位,例如1024%8=0,然后1<<0=1(二进制止:00000001),所以1024在b数组的第1024/8个字节的第1 bit中;
		//1025%8=1,然后1<<1=2(二进制:00000010),所以1025在b数组的第1025/8个字节的第2 bit中;1026%8=2,然后1<<2=4(二进制:00000100),所以1026在b数组的第1026/8个字节的第3 bit中;以次类推
        if (b[a[i]/8]&(1<<(a[i]%8))) break;
        else b[a[i]/8]|=(1<<(a[i]%8));
    }
    if (i<3) printf("%d\n",a[i]);
    else     printf("Can not find.\n");
	printf("%d\n",1<<(1024%8));
	printf("%d",5);
}


相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 字符串匹配算法
  • CXF:根据werservice代码生成WSDL(转)
  • 位运算的应用和实例
  • 深入理解css3中 nth-child 和 nth-of-type 的区别
  • 求最大公约数和最小公倍数
  • 方案撰写注意事项
  • Linux 常用命令使用方法大搜刮
  • 应用Hash函数(java描述)
  • 用java实现生产者和消费者问题
  • 【转】AngularJS 日期格式化 字典
  • Struts的线程安全问题
  • JSP中的pageEncoding和contentType的区别
  • 2016-wing的年度总结
  • java中split() replace() replaceAll()三个函数分析
  • SPOJ-COLONY - Linearian Colony!简单二分思想
  • 【vuex入门系列02】mutation接收单个参数和多个参数
  • ➹使用webpack配置多页面应用(MPA)
  • 2017 前端面试准备 - 收藏集 - 掘金
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • css属性的继承、初识值、计算值、当前值、应用值
  • java8-模拟hadoop
  • JavaScript实现分页效果
  • Python中eval与exec的使用及区别
  • Redis在Web项目中的应用与实践
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 安装python包到指定虚拟环境
  • 百度地图API标注+时间轴组件
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 力扣(LeetCode)56
  • 前端_面试
  • 前端性能优化——回流与重绘
  • 正则与JS中的正则
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​​​【收录 Hello 算法】10.4 哈希优化策略
  • ​linux启动进程的方式
  • ​数据结构之初始二叉树(3)
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #QT(TCP网络编程-服务端)
  • $LayoutParams cannot be cast to android.widget.RelativeLayout$LayoutParams
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (SpringBoot)第七章:SpringBoot日志文件
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (更新)A股上市公司华证ESG评级得分稳健性校验ESG得分年均值中位数(2009-2023年.12)
  • (含笔试题)深度解析数据在内存中的存储
  • (函数)颠倒字符串顺序(C语言)
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...