`
guiqing85
  • 浏览: 168658 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

找出重复数

阅读更多
找出重复数
题目:1 ~ 1000放在含有1001个元素的数组中,只有唯一的一个元素值重复,其它均只出现一次。每个数组元素只能访问一次,设计一个算法,将它找出来,不用辅助存储空间,能否设计一个算法实现?

姑且令该数组为int[] a

解法1:数组累和 - (1+2+3+...+.. + 999 + 1000)= 所求结果

public int find(int[] a) {

    int t = 1000 * (1000 + 1) / 2; // 1 ~ 1000的累和
    int sum = 0;
    for(int i = 0;i < a.length;i++) {
        sum += a[i];
    }
    return (sum - t);
}


解法2:异或


将所有的数全部异或,得到的结果与1^2^3^...^1000的结果进行异或,得到的结果就是重复数。

但是这个算法虽然很简单,但证明起来并不是一件容易的事情。这与异或运算的几个特性有关系。
首先是异或运算满足交换律、结合律。
所以,1^2^...^n^...^n^...^1000,无论这两个n出现在什么位置,都可以转换成为1^2^...^1000^(n^n)的形式。

其次,对于任何数x,都有x^x=0,x^0=x。
所以1^2^...^n^...^n^...^1000 = 1^2^...^1000^(n^n)= 1^2^...^1000^0 = 1^2^...^1000(即序列中除了n的所有数的异或)。

令,1^2^...^1000(序列中不包含n)的结果为T
则1^2^...^1000(序列中包含n)的结果就是T^n。
T^(T^n)=n。
所以,将所有的数全部异或,得到的结果与1^2^3^...^1000的结果进行异或,得到的结果就是重复数。

public int find(int[] a) {
    int t1 = 0;
    int t2 = 0;
    for(int i = 0;i < a.length;i++) {
        t1 ^= a[i];
    }

    for(int i = 1;i <= 1000;i++) {
        t2 ^= i;
    }
    return (t1 ^ t2);
}


遗留问题:如果放入数组a中的数为:1000个不连续且互不相同的数(设其组成的数组为n) + 重复数(取自数组n),又如何求取这个重复数呢,要保证算法的效率哦

分享到:
评论
1 楼 anfythyn 2010-09-27  
请问,遗留问题解决了吗?

相关推荐

    查找重复数字的JavaScript算法

    在日常编程中,经常会遇到需要从给定数据中找出重复项的需求,特别是在处理用户输入或数据分析时。我们将通过一个实际的例子演示这一过程,并详细讨论算法的实现和优化方法。 算法解析 我们的目标是编写一个函数 ...

    C语言查找数组里数字重复次数的方法

    本文实例讲述了C语言查找数组里数字重复次数的方法。分享给大家供大家参考。具体如下: #include stdafx.h #include #include using namespace std; int main() { int myarray[10]={4,3,7,4,8,7,9,4,3,6}; ...

    查找重复数据软件

    "查找重复数据软件"就是为此目的而设计的工具,它能够有效地检测并删除系统中的重复文件,以释放宝贵的磁盘空间。下面将详细讨论这种软件的工作原理、重要性以及如何使用。 重复数据查找软件的主要功能是对比文件...

    重复数字统计器

    《重复数字统计器》是一款基于易语言开发的实用工具,主要功能是对输入的一串数字进行统计,找出其中出现频率最高的数字或一组数字。易语言是中国自主研发的一种编程语言,以其直观、简洁的语法特性,使得编程过程...

    mio4#Leetcode#645-找出重复数字1

    借助HashMap找到重复出现的数字 & 没有出现的数字。

    超级实用去重复统计工具EditPlus

    这一步骤是去重前的关键,因为往往需要先排序才能更容易地识别出重复行。你可以根据实际需求选择排序依据,比如按首列、按特定列或者全列排序。 接下来,就是去重复行的操作。EditPlus虽然没有直接的“去除重复行”...

    重复数字统计器 .e文件

    3. 在ES中,可以对这些数据进行二次分析,例如,找出最常出现的重复数字,或者分析数字重复的趋势。 4. 结果可以通过Kibana等可视化工具展示,帮助用户直观理解数据。 总的来说,"重复数字统计器.e文件"结合Elastic...

    在线编程-第一个重复的数字

    在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几...请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。

    找重复文本个数

    总的来说,"找重复文本个数" 是一个利用易语言开发的实用工具,适用于需要分析大量文本数据,查找重复内容的场景,如数据清洗、文档比对等。通过了解其工作原理和源码,我们可以学习到如何高效地处理文本数据和实现...

    清风重复音乐查找

    "清风重复音乐查找"是一款专门针对音乐爱好者和整理音乐库的人士设计的软件工具,其主要功能是帮助用户在大量的音乐文件中找出重复的歌曲,以优化音乐存储空间,提高管理效率。这款软件可能采用了先进的音频指纹识别...

    102数字找不重复数字_使用与或找不重复数字_

    本主题探讨了如何利用位操作(位与运算符"&"和位或运算符"|”)来高效地找出数组中唯一的不重复数字。这种方法对于理解和掌握位操作技巧非常有帮助,同时也对提高算法效率具有重要意义。 首先,我们需要了解位操作...

    查找重复文件工具

    这类工具的主要功能是扫描用户计算机中的文件,找出内容完全相同的副本,从而帮助用户清理无用的重复文件,释放宝贵的磁盘空间。 **查找重复文件的重要性** 1. **节省存储空间**:重复文件占用不必要的硬盘空间,...

    查找重复照片

    "查找重复照片"是一个非常实用的功能,它能够帮助用户有效地清理重复图片,释放存储空间,提高计算机运行效率。下面我们将详细介绍这个主题,并提供一些相关的方法和工具。 1. **理解重复照片**: 重复照片是指...

    找出数组中重复的数字.rar

    剑指offer面试题库中第三题的C语言代码。在一个长度为n的数组里的所有数字都在0~n-1的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。

    java实现二分法查找出数组重复数字

    java实现二分法查找出数组重复数字 java二分法查找出数组重复数字是java编程语言中的一种常见算法,用于查找数组中的重复数字。在本文中,我们将详细介绍java实现二分法查找出数组重复数字的方法,并提供了具体的...

    输入一些数字,输出每个数重复出现的次数

    字典的特点是键值对形式,可以快速地查找和更新元素。 下面是一个简单的Python代码实现: ```python def count_duplicates(numbers): digit_count = {} for digit in numbers: if digit in digit_count: digit...

    查找重复图片的工具

    这类工具能够通过比较图片内容,帮助用户高效地找出并管理重复的图片。 VisiPics 是一款常见的查找重复图片的工具,其压缩包内的 VisiPics-1-31.exe 文件就是该软件的可执行程序。VisiPics 不仅免费,而且操作简单...

    题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

    每层循环从1到4,确保不会重复使用同一个数字。`for(i=1;i;i++)`、`for(j=1;j;j++)`、`for(k=1;k;k++)`就是这个三重循环的表示。 2. **条件判断**: - `if (i!=k&&i!=j&&j!=k)` 这个条件判断确保了生成的三位数的...

    kettle统计重复记录个数及明细

    - 可以使用`Stream Lookup`或`Join Rows (inner)`步骤来找出与原始数据集匹配的重复记录。 - 在`Stream Lookup`中,你需要配置主键字段,使其与之前计算重复记录的步骤相匹配,这样可以找到所有具有相同值的记录。...

Global site tag (gtag.js) - Google Analytics