首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在经过混洗的连续整数数组中找到重复的元素?

如何在经过混洗的连续整数数组中找到重复的元素?
EN

Stack Overflow用户
提问于 2010-04-09 15:35:06
回答 17查看 65.3K关注 0票数 73

我最近在某个地方遇到了一个问题:

假设您有一个包含1001个整数的数组。这些整数的顺序是随机的,但您知道每个整数都在1到1000 (包括1和1000)之间。此外,每个数字在数组中只出现一次,但有一个数字出现两次。假设您只能访问数组的每个元素一次。描述一种查找重复数的算法。如果你在你的算法中使用了辅助存储,你能找到一个不需要它的算法吗?

我感兴趣的是second part,即不使用辅助存储的。你有什么想法吗?

EN

回答 17

Stack Overflow用户

回答已采纳

发布于 2010-04-09 15:38:23

只需将它们相加,然后减去如果只使用1001个数字时所期望的总数。

例如:

代码语言:javascript
复制
Input: 1,2,3,2,4 => 12
Expected: 1,2,3,4 => 10

Input - Expected => 2
票数 104
EN

Stack Overflow用户

发布于 2010-04-09 17:06:57

Franci Penov的解决方案的非破坏性版本。

这可以通过使用XOR运算符来完成。

假设我们有一个大小为5的数组:4, 3, 1, 2, 2

这些是在指数:* 0, 1, 2, 3, 4

现在对所有元素和所有索引执行XOR。我们得到2,它是重复的元素。这是因为,0在XORing中不起任何作用。剩余的n-1索引与数组中相同的n-1元素配对,数组中唯一未配对的元素将是副本。

代码语言:javascript
复制
int i;
int dupe = 0;
for(i = 0; i < N; i++) {
    dupe = dupe ^ arr[i] ^ i;
}
// dupe has the duplicate.

这种解决方案的最大特点是它不会出现基于加法的解决方案中出现的溢出问题。

由于这是一个面试问题,最好从基于加法的解决方案开始,确定溢出限制,然后给出基于XOR的解决方案:)

这使用了一个额外的变量,因此不能完全满足问题中的要求。

票数 23
EN

Stack Overflow用户

发布于 2010-04-09 15:38:39

把所有的数字加在一起。最终的总和将是1+2+...+1000+duplicate数字。

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2605766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档