Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在数组中找到非耦合整数?_C++_C_Algorithm - Fatal编程技术网

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
XOR
x
对于所有
x
值都是零,
0
XOR
x
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
XOR
x
对于所有
x
值都是零,
0
XOR
x
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.