1000个无序数查找两个重复数

按位异或运算符: ^

两个相同的数按位异或结果为0

任何数和零按位异或结果为这个数本身

 

根据按位异或的以上特性, 我们可以为下面这首题目给出一个简便的算法:

有一个长度为10000的数列, 存放着1-10000的自然数, 连续, 不重复, 但数列并不是有序的

现在随机选取1-10000之间的某个自然数, 加入到这个数列中, 要求用简便的算法找到这个后来加入的数

 

分析一下, 这个问题是肯定不能用序列中数之和减去1-1000数列和的办法的, 这样做可能会造成溢出, 首先排除.

第二, 有的人认为这个题目说的是有序数组, 我觉得应该不是的. 如果数组是有序的, 只要比较前后两个数是否相差1就可以很快速也很容易找到重复数.

而这种问题非常适合异或(如果不是数值类型, 则不适合), 因为上面讲的按位异或运算符的两个特性, 可得1^1=0, 1^1^2=2, 1^2^1^2^3=3…

所以, 数组中10001个数的"异或和"再与1-1000异或可得重复的那个数.

异或查找:

int xor = 0;
for (int i = 0; i <= list.Max; i++)
{
    xor ^= list[i];
    xor ^= i;
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,这是一个关于编程的问题,可以回答。您可以使用set.intersection()方法来查找两个集合的交集。例如: ```python set1 = {1, 2, 3, 4, 5} set2 = {3, 4, 5, 6, 7} common_elements = set1.intersection(set2) print(common_elements) ``` 输出为: ``` {3, 4, 5} ``` 这样就可以找到两个集合中的相同元素了。 ### 回答2: 要在Python中查找两个集合中的相同元素,可以使用集合(set)的交集操作。 集合是一种无序且不复的数据结构,可以用来存储元素的集合。Python中的set类型和数学上的集合概念类似,可以进行并集、交集、差集等操作。 首先,我们可以分别将两个集合A和B定义为set类型的变量,例如: A = {1, 2, 3, 4} B = {3, 4, 5, 6} 然后,可以使用交集操作符 & 来获取两个集合的交集,即相同的元素。代码如下: common_elements = A & B 最后,我们可以打印出交集的结果,代码如下: print(common_elements) 执行后,输出的结果为{3, 4},即集合A和集合B中共有的元素。 交集操作是一种非常简洁和高效的方法来查找两个集合中的相同元素。在实际应用中,可以根据具体的需求和数据结构选择合适的操作方法。 ### 回答3: 要在Python中查找两个集合中的相同元素,可以使用集合的交集运算。集合是Python中的一个内置数据类型,它没有顺序和复元素。 假设我们有两个集合A和B,我们可以使用以下代码找到它们的相同元素: ``` A = {1, 2, 3, 4} B = {3, 4, 5, 6} common_elements = A.intersection(B) ``` 在上面的代码中,`intersection()`是一种集合的交集操作。它将返回一个新的集合,其中包含A和B中共有的元素。在这个例子中,`common_elements`将是集合{3, 4}。 我们还可以将代码稍作修改以适应更多的集合。例如,我们想要查找三个集合A、B和C中的相同元素: ``` A = {1, 2, 3} B = {2, 3, 4} C = {3, 4, 5} common_elements = A.intersection(B, C) ``` 在这个例子中,`common_elements`将是集合{3},因为只有元素3在A、B和C中都存在。 总结起来,要在Python中查找两个或多个集合中的相同元素,可以使用集合的交集操作`intersection()`。这将返回一个新的集合,其中包含所有输入集合共有的元素。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值