一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
数据范围:数组长度
,数组中每个数的大小 
要求:空间复杂度
,时间复杂度 )
要求:空间复杂度
提示:输出时按非降序排列。
#include <stdlib.h>
int cmp_int(const void* e1, const void* e2) {
return (*(int*)e1 - * (int*)e2);
}
int* FindNumsAppearOnce(int* nums, int numsLen, int* returnSize ) {
qsort(nums, numsLen, sizeof(nums[0]), cmp_int);
for (int i = 1; i < numsLen; i++) {
if (nums[i] == nums[i - 1]) {
if (nums[i] == nums[i - 1] == 0)continue;
nums[i] = nums[i - 1] = 0;
}
}
int* p = (int*)malloc(sizeof(nums[0]) * numsLen);
int k = 0;
for (int i = 0; i < numsLen; i++) {
if (nums[i] != 0) {
p[k++] = nums[i];
}
}
*returnSize = k;
return p;
} int* FindNumsAppearOnce(int* nums, int numsLen, int* returnSize ) {
int HashTable[1000000] = {0}, i, j, *res;
res = (int*)malloc(2*sizeof(int));
for (i = 0; i < numsLen; i++)
HashTable[nums[i]]++;
for (i = 0, j = 0; i < sizeof(HashTable); i++) {
if (HashTable[i] == 1)
res[j++] = i;
if(j>=2)
break;
}
*returnSize = 2;
return res;
} int a[2];
int* FindNumsAppearOnce(int* array, int arrayLen, int* returnSize ) {
// write code here
*returnSize = 2;
int i,j = 0;
int b[1000001];
for (i = 0; i < arrayLen; i++){
b[array[i]]++;
}
for (i = 0; i < 1000001; i++){
if (b[i] == 1) a[j++] = i;
}
return a;
} /**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param array int整型一维数组
* @param arrayLen int array数组长度
* @return int整型一维数组
* @return int* returnSize 返回数组行数
*
* C语言声明定义全局变量请加上static,防止重复定义
*/
int* FindNumsAppearOnce(int* array, int arrayLen, int* returnSize ) {
// write code here
int a[1000000];
int i,k=0;
for(i=0;i<arrayLen;i++)
{
a[array[i]]++;
}
for(int j=0;j<1000000;j++)
{
if(a[j]==1)
{
a[k]=j;
k++;
}
}
for(int j=0;j<k;j++)
{
for(int j1=0;j1<k-1;j1++)
{
if(a[j1]>a[j1+1])
{
int temp;
temp=a[j1];
a[j1]=a[j1+1];
a[j1+1]=temp;
}
}
}
int* re=(int*)malloc(sizeof(int)*2);
re[0]=a[0];
re[1]=a[1];
*returnSize=2;
return re;
}