寻找孤独的号码
Find the lone number
我正在尝试搜索一个数组并打印出其中唯一没有成对的数字,因此在本例中为“4”。
结果一直是 2 所以即使我觉得我的逻辑是正确的,我肯定忽略了一些东西。
我已经尝试解决这个问题一段时间了,但总是卡住
非常感谢。
代码如下:
int main(){
int arr[] = {1, 1, 2, 2, 3, 3, 4};
int n = sizeof(arr)/sizeof(*arr);
int foundNum = 0;
int counter = 0;
while(counter !=n) {
int i = 0;
if (arr[i] != arr[i + 1]) {
foundNum = arr[i];
} else {
arr[i] = arr[i+2];
}
counter += 1;
}
std::cout << foundNum;
return 0;
}
您有 counter
,因此您应该使用它来确定要检查的索引而不是新变量 i
。
同样要将搜索位置移动到+2
位置,您应该将2
添加到循环变量而不是修改数组。
#include <iostream>
int main(void){
int arr[] = {1, 1, 2, 2, 3, 3, 4};
int n = sizeof(arr)/sizeof(*arr);
int foundNum = 0;
int counter = 0;
while(counter !=n) {
if (counter + 1 >= n || arr[counter] != arr[counter + 1]) {
foundNum = arr[counter];
counter += 1;
} else {
counter += 2;
}
}
std::cout << foundNum;
return 0;
}
如果你确定除了孤数以外的所有数字都是成对出现的,那么用一个XOR操作就很容易做到了。
并且 xor 一对是 0。因此,如果你遍历整个数组,所有对的异或结果都是 0。
与 0 的 XOR 结果本身相同。因此,当所有数字通过它们自己的副本抵消时,单独的数字与结果 0 的异或保留为答案。
代码:
int main(){
int arr[] = {1, 1, 2, 2, 3, 3, 4};
int n = sizeof(arr)/sizeof(*arr), a = 0;
for ( int i = 0; i < n; i++ ) a = a ^ arr[i];
std::cout << "Found the lone number : " << a;
return 0;
}
我正在尝试搜索一个数组并打印出其中唯一没有成对的数字,因此在本例中为“4”。
结果一直是 2 所以即使我觉得我的逻辑是正确的,我肯定忽略了一些东西。
我已经尝试解决这个问题一段时间了,但总是卡住
非常感谢。
代码如下:
int main(){
int arr[] = {1, 1, 2, 2, 3, 3, 4};
int n = sizeof(arr)/sizeof(*arr);
int foundNum = 0;
int counter = 0;
while(counter !=n) {
int i = 0;
if (arr[i] != arr[i + 1]) {
foundNum = arr[i];
} else {
arr[i] = arr[i+2];
}
counter += 1;
}
std::cout << foundNum;
return 0;
}
您有 counter
,因此您应该使用它来确定要检查的索引而不是新变量 i
。
同样要将搜索位置移动到+2
位置,您应该将2
添加到循环变量而不是修改数组。
#include <iostream>
int main(void){
int arr[] = {1, 1, 2, 2, 3, 3, 4};
int n = sizeof(arr)/sizeof(*arr);
int foundNum = 0;
int counter = 0;
while(counter !=n) {
if (counter + 1 >= n || arr[counter] != arr[counter + 1]) {
foundNum = arr[counter];
counter += 1;
} else {
counter += 2;
}
}
std::cout << foundNum;
return 0;
}
如果你确定除了孤数以外的所有数字都是成对出现的,那么用一个XOR操作就很容易做到了。
并且 xor 一对是 0。因此,如果你遍历整个数组,所有对的异或结果都是 0。
与 0 的 XOR 结果本身相同。因此,当所有数字通过它们自己的副本抵消时,单独的数字与结果 0 的异或保留为答案。
代码:
int main(){
int arr[] = {1, 1, 2, 2, 3, 3, 4};
int n = sizeof(arr)/sizeof(*arr), a = 0;
for ( int i = 0; i < n; i++ ) a = a ^ arr[i];
std::cout << "Found the lone number : " << a;
return 0;
}