我需要从2个int数组中获取唯一值
允许重复
只有一个唯一值
喜欢:
int arr1[3]={1,2,3};
int arr2[3]={2,2,3};
我希望获得的价值是:
int unique[]={1}
我该怎么做? 我已经混淆了我的' for'和'如果' 这不是功课
我知道如何合并2个数组和del重复值
但我需要知道哪个数组具有唯一值
请帮帮我:)。
这是我做过的一些代码
int arr1[3]={1,2,3}
int arr2[3]={2,2,3}
int arrunique[1];
bool unique = true;
for (int i=0;i!=3;i++)
{
for (int j=0;j!=3;j++)
{
if(arr1[i]==arr2[j])
{
unique=false;
continue;
}
else
{
unique=true;
}
if(unique)
{
arrunique[0]=arr1[i]
break;
}
}
cout << arrunique[0];
答案 0 :(得分:5)
假设:
你可以做(未经测试):
// Assuming arr1[], arr2[], and lengths as arr1_length
int i = 0,j = 0, k = 0;
int unique[arr1_length + arr2_length];
while(i < arr1_length && j < arr2_length) {
if(arr1[i] == arr2[j]) {
// skip all occurrences of this number in both lists
int temp = arr1[i];
while(i < arr1_length && arr1[i] == temp) i++;
while(j < arr2_length && arr2[j] == temp) j++;
} else if(arr1[i] > arr2[j]) {
// the lower number only occurs in arr2
unique[k++] = arr2[j++];
} else if(arr2[j] > arr1[i]) {
// the lower number only occurs in arr1
unique[k++] = arr1[i++];
}
}
while(i < arr1_length) {
// if there are numbers still to read in arr1, they're all unique
unique[k++] = arr1[i++];
}
while(j < arr2_length) {
// if there are numbers still to read in arr2, they're all unique
unique[k++] = arr2[j++];
}
一些替代方案:
如果您不想要unique
数组中的重复项,则可以在分配给唯一数组时跳过相关列表中所有出现的此数字。
如果要记录位置而不是值,则保持两个“唯一位置”数组(每个输入数组一个)并指定i
或j
的值到适当的相应数组。
如果只有一个唯一值,请将分配更改为要返回的唯一数组。
答案 1 :(得分:0)
根据您的需要,您可能还需要查看标准库的set_symmetric_difference()功能。但是,至少可以说,它对重复值的处理使得它的使用有点棘手。
答案 2 :(得分:0)
#include <stdio.h>
#include <stdlib.h>
int cmp ( const void *a , const void *b )
{
return *(int *)a - *(int *)b;
}
int main()
{
int arr1[5] = {5,4,6,3,1};
int arr2[3] = {5, 8, 9};
int unique[8];
qsort(arr1,5,sizeof(arr1[0]),cmp);
printf("\n");
qsort(arr2,3,sizeof(arr2[0]),cmp);
//printf("%d", arr1[0]);
int i = 0;
int k = 0;
int j = -1;
while (i < 5 && k < 3)
{
if(arr1[i] < arr2[k])
{
unique[++j] = arr1[i];
i++;
}
else if (arr1[i] > arr2[k])
{
unique[++j] = arr2[k];
k++;
}
else
{
i++;
k++;
}
}
//int len = j;
int t = 0;
if(i == 5)
{
for(t = k; t < 3; t++)
unique[++j] = arr2[t];
}
else
for(t = i; t < 5; t++)
unique[++j] = arr2[t];
for(i = 0; i <= j; i++)
printf("%d ", unique[i]);
return 0;
}
这是我的代码,虽然有一个很好的答案。 我没有意识到知道哪个数组具有唯一值的想法。 我也认为你选择的正确答案也没有。