`
miluroe
  • 浏览: 4242 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

32位全范围的int查重方法

 
阅读更多

        32位RAM处理器中,int代表4个字节,具有32位,它的范围是-2147483648~2147483647的整数。

        若想对全范围整数进行查重,即对于任意数量任意大小的int变量I,判断I是否出现在已知的数组中。若通过整数数组int[]来表示全范围的整数,那么数组的长度为2^32。这样会使普通PC机器的内存溢出。考虑到任意int是由32位组成的,即如果能使每一int与32位形成唯一且互不重复的映射即可。故建立字节数组byte[] B。1 int = 8 bit,那么B的长度为2^29的长度,300MB的内存开销即可满足。

 

int[] 与byte[] 对应关系的建立:

        假设int 的大小I 整除8 得到的整数a,余数为b。a 为I 在byte[]中的byte[a]上,b 为I 在byte[a] 的8个整数的b位上。 

        byte[]刚建立时所有数据为0, 将输入整数的得到的a, b 的值。将byte[a] 的b 位改为1 即可。

byte[a] 的b 位数字修改方法:

        假设byte[a]=32。将它转换为二进制并补全8 位可得00100000。当b的4 时,即00101000为原始数组中存在目标数,重复。00100000 表示非重复。即将b代表的位数取出判断0、1即可。

 

        这样可以在遍历一遍目标数组的情况下完成查重,也便于在普通PC机器上实现算法。

 

分享到:
评论

相关推荐

    uint32_t格式转int格式算法

    - 不同平台上的`int`大小可能不同,因此在编写跨平台代码时,应该使用`stdint.h`库中的固定宽度整型,如`int32_t`,以确保一致的字节数。 综上所述,将`uint32_t`格式转换为`int`格式涉及类型转换、溢出检查以及在...

    int型数字取值范围

    这个范围涵盖了所有可能的16位二进制补码表示的整数。在编程时,了解这些限制可以帮助避免因超出数据类型范围而导致的溢出错误。在处理数值计算时,尤其是在进行算术运算或比较操作时,确保数值在合法范围内是非常...

    xint 编译好的库,包含32位和64位 vs2019

    在本篇文章中,我们将深入探讨XINT库的特性、编译过程以及如何在VS2019环境下使用32位和64位版本。 首先,XINT库的核心优势在于它的大整数运算能力。与标准C库中的整数类型不同,XINT支持超过机器字长的大整数操作...

    short,int ,long,float取值范围

    - **尾数M**:采用原码表示,并且根据二进制规格化的方法,最高有效位总是1,这一位通常不存储而是在计算中默认存在,从而使得实际表示的尾数比存储的位数多一位。 - **浮点数的三种形式**: - **短实数(Single,...

    最新单片机仿真 INT1中断5位计数

    最新单片机仿真 INT1中断5位计数最新单片机仿真 INT1中断5位计数最新单片机仿真 INT1中断5位计数最新单片机仿真 INT1中断5位计数最新单片机仿真 INT1中断5位计数最新单片机仿真 INT1中断5位计数最新单片机仿真 INT1...

    zint32位安装包

    zint32位安装包

    最新单片机仿真 INT0中断3位计数

    最新单片机仿真 INT0中断3位计数最新单片机仿真 INT0中断3位计数最新单片机仿真 INT0中断3位计数最新单片机仿真 INT0中断3位计数最新单片机仿真 INT0中断3位计数最新单片机仿真 INT0中断3位计数最新单片机仿真 INT0...

    int128_c++int128_

    在C++编程语言中,`int128`是一个用于表示大整数的数据类型,它提供了128位的存储空间,能够存储超出标准`int`、`long`或`long long`范围的大整数值。这个数据类型的使用场景通常包括处理大数据计算、密码学、数学...

    float、int、unsigned int数据与其在实际内存中表示的相互转换小程序

    在C++编程语言中,`float`、`int`和`unsigned int`是三种基本的数据类型,它们在内存中有着不同的表示方式。本程序旨在帮助开发者理解这些数据类型的内部存储机制,并提供它们之间的转换功能。这对于我们深入理解...

    解决时间戳long转换int溢出(即转换值为负数) long转int

    然而,当你需要将这个long类型的时间戳转换为int类型时,可能会遇到数据溢出的问题,因为int类型的存储空间只有32位(4个字节),而long类型则有64位(8个字节)。 当long类型的时间戳转换为int类型时,如果long值...

    在Unicode宽字符下CString转int的方法

    【在Unicode宽字符下CString转int的方法】 在Unicode环境下,将CString对象转换为整数(int)是一项常见的任务,这通常涉及到字符串解析和类型转换。Unicode是一种广泛采用的字符编码标准,它支持多种语言和字符集...

    源码讲解int和unsigned int 的区别,每一位是干什么的

    同样地,对于32位系统,`unsigned int` 的值范围是从 0 到 4,294,967,295(即 2^32 - 1)。 #### 内存表示 `int` 和 `unsigned int` 在内存中的表示方式也有所不同: - 对于 `int` 类型,最高位通常用作符号位,...

    STM32 头文件stdint.h简略翻译

    - `int32_t`: 32位有符号整数。 - `int64_t`: 64位有符号整数。 2. **精确宽度的无符号整数类型**:同样具有确切的宽度,但不带符号。 - `uint8_t`: 8位无符号整数。 - `uint16_t`: 16位无符号整数。 - `uint...

    stdint.h stdint.h

    通过使用 `stdint.h` 定义的类型,我们可以确保无论在哪种系统上,`int32_t` 总是32位,`int64_t` 总是64位。 在实际编程中,`stdint.h` 常用于需要精确控制整数位宽的场景,例如在处理二进制数据、网络通信协议、...

    原理讲解-ServletInputStream.readLine(byte[] b, int off, int len) 方法

    `readLine(byte[] b, int off, int len)` 方法是 `ServletInputStream` 提供的一个方法,用于读取输入流中的一行数据。这个方法在处理文本数据时非常有用,因为它可以方便地按行读取数据,而不仅仅是单个字节。 在...

    lua proto 解决int64 解析

    3. 分拆处理:另一种方法是将int64拆分为两个32位整数,分别在Lua中存储和处理。这需要编写额外的逻辑来处理边界情况和溢出问题,但可以在不引入额外库的情况下解决int64问题。 4. 使用其他数据类型:如果可能,...

    Keil MDK-ARM各种数据类型占用的字节数 char short int float double

    typedef signed int int32; typedef float fp32; typedef double fp64; ``` 这样,即使在不同的平台或环境下,只要确保对应的typedef正确,代码依然保持清晰和一致。在处理结构体成员时,了解这些数据类型占用的...

    java中long类型转换为int类型-java long转int.pdf

    第三种方法是先将 `long` 类型的值转换为 `String`,然后再通过 `Integer.parseInt()` 将字符串解析为 `int`。这种方法比较间接,但可以避免直接转换时的溢出异常。不过,如果原始 `long` 值超出 `int` 范围,`...

    C# Byte数组转Int32 Short Float(浮点数)

    1. **Int32到/从字节数组**:`Int32`在C#中表示32位带符号整数,范围从-2^31到2^31-1。要从字节数组转换为`Int32`,可以使用`BitConverter.ToInt32()`方法。这个方法接受字节数组和起始位置作为参数,并返回转换后的...

    STEP7中int_time_s5time转换方法

    2. **时间 S5Time**:这是一个16位的数据类型,使用BCD(二进制编码十进制)编码,用来表示秒和百分之一秒。它的结构为:高四位代表秒,低四位代表秒的百分之一。 3. **时间 Time**:这是一个32位的数据类型,类似...

Global site tag (gtag.js) - Google Analytics