C++ 如何在数组中找到非耦合整数?
可能重复:C++ 如何在数组中找到非耦合整数?,c++,c,algorithm,C++,C,Algorithm,可能重复: 给定一个奇数大小的整数数组。除单个整数外,数组中的所有整数都显示两次。如何以最有效的方式(从内存和复杂度两方面)找到这个未耦合的整数?如果将它们全部异或在一起,最终将得到一个(未耦合)值 这是因为xXORx对于所有x值都是零,0XORx是x 举例来说,以下程序输出99: #include <stdio.h> int main (void) { int num[] = { 1, 2, 3, 4, 5, 99, 1, 2, 3, 4, 5}; unsign
给定一个奇数大小的整数数组。除单个整数外,数组中的所有整数都显示两次。如何以最有效的方式(从内存和复杂度两方面)找到这个未耦合的整数?如果将它们全部异或在一起,最终将得到一个(未耦合)值 这是因为
x
XORx
对于所有x
值都是零,0
XORx
是x
举例来说,以下程序输出99
:
#include <stdio.h>
int main (void) {
int num[] = { 1, 2, 3, 4, 5, 99, 1, 2, 3, 4, 5};
unsigned int i;
int accum;
for (accum = 0, i = 0; i < sizeof(num)/sizeof(*num); i++)
accum ^= num[i];
printf ("%d\n", accum);
return 0;
}
#包括
内部主(空){
int num[]={1,2,3,4,5,99,1,2,3,4,5};
无符号整数i;
累积积分;
对于(累计=0,i=0;i
就效率而言,基本上是O(1)空间和O(n)时间复杂度,最小、平均和最坏情况。如果将它们全部异或在一起,最终将得到孤立(未耦合)值 这是因为
x
XORx
对于所有x
值都是零,0
XORx
是x
举例来说,以下程序输出99
:
#include <stdio.h>
int main (void) {
int num[] = { 1, 2, 3, 4, 5, 99, 1, 2, 3, 4, 5};
unsigned int i;
int accum;
for (accum = 0, i = 0; i < sizeof(num)/sizeof(*num); i++)
accum ^= num[i];
printf ("%d\n", accum);
return 0;
}
#包括
内部主(空){
int num[]={1,2,3,4,5,99,1,2,3,4,5};
无符号整数i;
累积积分;
对于(累计=0,i=0;i
就效率而言,基本上是O(1)空间和O(n)时间复杂度,最小、平均和最坏情况。正如pax所建议的,将所有元素异或在一起将为您提供唯一的价值
int getUncoupled(int *values, int len)
{
int uncoupled = 0;
for(int i = 0; i < len; i++)
uncoupled ^= values[i];
return uncoupled;
}
int getUncoupled(int*值,int len)
{
int未耦合=0;
对于(int i=0;i
但是这里有一个小小的警告:没有未耦合的值和未耦合的值为零的集合之间有什么区别
x^x^y^y=0
但x^x^0^y^y
是否也等于零?耐人寻味:)正如帕克斯建议的那样,将所有元素异或在一起将为您提供唯一的价值
int getUncoupled(int *values, int len)
{
int uncoupled = 0;
for(int i = 0; i < len; i++)
uncoupled ^= values[i];
return uncoupled;
}
int getUncoupled(int*值,int len)
{
int未耦合=0;
对于(int i=0;i
但是这里有一个小小的警告:没有未耦合的值和未耦合的值为零的集合之间有什么区别
x^x^y^y=0
但x^x^0^y^y
是否也等于零?值得思考的是:)输出没有区别,但是,考虑到规格“奇数大小”和“数组中的所有整数除单个整数外都出现两次,x^x^y^y
是不可能的。我的错误是,我更多的意思是如果数组不是奇数大小。考虑到这是一个问题约束,我想我指出out是不相关的。输出没有区别,但是,考虑到规格“奇数大小”和“数组中的所有整数都出现了两次,只有一个整数除外”,x^x^y^y
是不可能的。我的错误是,我更多的意思是如果数组不是奇数大小。考虑到这是一个问题约束,我想我会指出,out是不相关的。@Guarav,那么你会得到零,正如预期的那样。试试看。更改上面代码中的99,然后让‘er rip:-)是的,没错,只是运行它。谢谢:)+1@Guarav,那么您将得到零,正如预期的那样。试试看。更改上面代码中的99,然后让‘er rip:-)是的,没错,只是运行它。谢谢:)+1.