一个整型数组里除了两个数字只出现一次,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
数据范围:数组长度 ,数组中每个数的大小
要求:空间复杂度 ,时间复杂度
要求:空间复杂度 ,时间复杂度
提示:输出时按非降序排列。
#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; }