【数字】--数字
来源:互联网 发布:中学生学编程 编辑:程序博客网 时间:2024/05/19 22:48
1 给40亿个不重复的unsigned int的整数,没排过序的,然后再给几个数,如何快速判断这几个数是否在那40亿个数当中?
算法思路:
unsigned int 的取值范围是0到2^32-1。我们可以申请连续的2^32/8=512M的内存,用每一个bit对应一个unsigned int数字。首先将512M内存都初始化为0,然后每处理一个数字就将其对应的bit设置为1。当需要查询时,直接找到对应bit,看其值是0还是1即可。
其实这个类似的应用是用户在线离线系统,一个用户在线还是离线。
2 给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字。(原数组不必保留)
方法1.
对数组进行排序(快速,堆),然后比较相邻的元素是否相同。
时间复杂度为O(nlogn),空间复杂度为O(1)。
方法2.
使用bitmap方法。
定义长度为N/8的char数组,每个bit表示对应数字是否出现过。遍历数组,使用 bitmap对数字是否出现进行统计。
时间复杂度为O(n),空间复杂度为O(n)。
方法3.
遍历数组,假设第 i 个位置的数字为 j ,则通过交换将 j 换到下标为 j 的位置上。直到所有数字都出现在自己对应的下标处,或发生了冲突。
时间复杂度为O(n),空间复杂度为O(1)。
3 在2.5亿个整数中找出不重复的整数,内存不足以容纳这2.5亿个整数。
算法思路:
方案一、采用hase的方法,将2.5亿个数拆分成多个小文件,然后取出每个小文件中不重复的数
方案二、采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32*2bit=1GB内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看bitmap,把对应位是01的整数输出即可。
注意:
1 KB = 1024 bytes
1 MB = 1024 KB
1 GB = 1024 MB
- 数字
- 数字
- 数字:
- 数字
- 数字
- 数字
- 数字
- 数字
- 数字
- 数字
- 数字
- 数字
- 数字
- 【数字】--数字
- 数字数字钟课程设计
- 数字数字钟课程设计
- 数字数字钟课程设计
- 用数字造数字
- codefiorces-165B-Burning Midnight Oil
- 70. Climbing Stairs
- iOS 图片圆角加阴影 + 按钮的渐变颜色
- C++ 操作符重载(2) 复数加减乘除
- 见山只是山,见水只是水——提升对继承的认识
- 【数字】--数字
- 《Java多线程编程核心技术》读后感
- make和cmake关系区别
- 第一章 SpringMVC之 基础知识及代码
- 树形DP-Computer
- SSM框架之Mybatis动态sql配置
- 阿里fastjson怎么处理时间格式
- 第二章 SpringMVC之 DispatcherServlet解析
- Python最难的问题