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

40亿非负整数中找到出现两次的数和所有数的中位数

题目:

32为无符号整数的范围是0~4294967295,现在有40亿个无符号整数,可以使用最多1GB的内存,找出所有出现了两次的数。

补充题目:

可以使用最多10MB的内存,怎么找到这40亿整数的中位数。

解答:

对于原问题,可以用bit map的方式来表示数出现的情况。具体地说,是申请一个长度为4294967295*2的bit类型的数组bitArr,用2个位置表示一个数出现的词频,1B占用8个bit,所以长度为4294967295*2的bit类型的数组占用1GB空间。怎么使用这个bitArr数组呢?遍历这40亿个无符号数,如果初次遇到num,就把bitArr[num*2 + 1]和bitArr[num*2]设置为01,如果第二次遇到num,就把bitArr[num*2 + 1]和bitArr[num*2]设置为10,如果第三次遇到num,就把bitArr[num*2 + 1]和bitArr[num*2]设置为11。以后再遇到num,发现此时bitArr[num*2 + 1]和bitArr[num*2]已经被设置为11,就不再做任何设置。遍历完成后,再次遍历bitArr,如果发现bitArr[i*2 + 1]和bitArr[i*2]设置为10,那么i就是出现了两次的数。

http://www.xdnf.cn/news/536923.html

相关文章:

  • 技术决策缺乏团队参与,如何增强执行力?
  • 修改样式还能影响功能?是的!
  • 掌握Python编程:从C++/C#/Java开发者到AI与医学影像开发专家
  • C#编写软件添加菜单栏
  • 2 sys库
  • 陀螺匠部门默认角色怎么用
  • Java日志记录教程:log4j 1.2.11配置与使用详解(附示例代码)
  • 基于poetry管理python项目学术版gurobipy WSL安装方式
  • Linux架构篇、第五章_06Jenkins 触发器全面解析与实战指南
  • 智能门锁为什么需要做EN 18031欧盟检测认证
  • 成功案例|单细胞与空间转录组学:解锁前列腺癌微环境密码
  • 没有公网ip怎么端口映射外网访问?使用内网穿透可以解决
  • 实验-使用递归计算阶乘-RISC-V(计算机组成原理)
  • 异步委托执行管理器:更新
  • 机器学习教程简介:从基础概念到实践应用的全面指南
  • Windows逆向工程提升之二进制分析工具:HEX查看与对比技术
  • 高性能锁机制 CAS:Java 并发编程中的深度剖析
  • 【通用智能体】Lynx :一款基于终端的纯文本网页浏览器
  • 用 SamGeo 库实现遥感影像自动分割:从本地 TIFF 到 SHP/GeoJSON 的一站式处理(Python 脚本实现)
  • 理解 Swift 逃逸闭包与 implicit `self`
  • 终端安全与终端管理:有什么区别及其重要性?
  • DSRC|动态交换路况信息,减少事故优化流量的无线通信技术【无线通信小百科】
  • select * from 限制个数
  • (1) 查看端口状态
  • DeepSeek 如何实现 128K 上下文窗口?
  • MySQL的锁机制
  • javascript 编程基础(2)javascript与Node.js
  • 文本分类实战:使用LSTM对微博评论进行情感分析
  • 数据库中的SCHEMA
  • 如何优化 Elasticsearch 磁盘空间和使用情况