我能够在给定的代码段中找出排序数组中的唯一元素。
我需要一个解决方案,通过避免重复数字来查找唯一元素,即来自格式为{0,1,1,2,3,4,4,1,3,5,9,12,12,13,14}
的非排序数组。
C计划:
#include<stdio.h>
#define ARRAY_SIZE 15
int main()
{
int arr[ARRAY_SIZE]={0,1,1,2,3,4,4,1,3,5,9,12,12,13,14};
int i=0,j=0,t;
printf("\nThe Array elements are : ");
for(i=0; i<ARRAY_SIZE;i++)
printf("%d ",arr[i]);
for (j=0 ; j<(ARRAY_SIZE-1) ; j++)
{
for (i=0 ; i<(ARRAY_SIZE-1) ; i++)
{
if (arr[i+1] < arr[i])
{
t = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = t;
}
}
}
printf("\n\nunique elements are : ");
printf("%d ",arr[0]);
for(i=1;i<ARRAY_SIZE;i++)
{
/* check current number and prev number if they are different that mean we met
another unique element */
if(arr[i-1]^arr[i])
/*a^b = zero only if two numbers are different*/
{
printf("%d ",arr[i]);
}
}
return 0;
}
答案 0 :(得分:1)
这可能有点矫枉过正,但是:
#include <stdio.h>
#include <stdlib.h>
int array_contains(const int* arr, size_t len, int elem) {
int i;
for (i=0; i!=len; ++i)
if (arr[i]==elem)
return 1;
return 0;
}
void print_uniques(const int* arr, size_t len) {
size_t uniques_len = 0;
int uniques_arr[len];
int i;
for (i=0; i!=len; ++i)
if (!array_contains(uniques_arr, uniques_len, arr[i]))
uniques_arr[uniques_len++] = arr[i];
for (i=0; i!=uniques_len; ++i)
printf("%d ", uniques_arr[i]);
printf("\n");
}
#define ARRAY_SIZE 15
int main()
{
int arr[ARRAY_SIZE]={0,1,1,2,3,4,4,1,3,5,9,12,12,13,14};
print_uniques(arr, ARRAY_SIZE);
return 0;
}
是的,这是O(N^2)
。您可以通过使用某种哈希集而不是维护无序列表来改进这一点。我也会查看hsearch
。
答案 1 :(得分:1)
/*
To avoid too many iterations, after finding the duplicates break the inner loop
*/
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a[] = {50,1, 34, 1, 3, 11, 75, 3, 4, 9, 11, 4, 9, 3, 34, 100,0,100};
int arr[sizeof(a)/ sizeof(a[0])] = { 0 };
int i = 0, j = 0;
for(i = 0; i < (sizeof(a) / sizeof(a[0])); i++)
{
for(j = i+1; j < (sizeof(a)/ sizeof(a[0])); j++)
{
if(a[i] == a[j])
{
++arr[i];
++arr[j];
break; // used to avoid too many iterations.
}
}
if(arr[i] == 0) //must have unique number
{
printf ("The unique numbers = %d\n", a[i]);
}
}
return 0;
}
答案 2 :(得分:0)
如果没有性能要求,您可以执行以下操作:
- 对数组进行排序。
- 执行您发布的代码。
醇>