/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param nums int整型一维数组
* @param numsLen int nums数组长度
* @return int整型一维数组
* @return int* returnSize 返回数组行数
*/
#include <stdlib.h>
void swap(int* a, int* b) {
int temp = *a;
*a = *b;
*b = temp;
}
int* FindNumsAppearOnce(int* nums, int numsLen, int* returnSize ) {
// write code here
if(numsLen == 0) {
*returnSize = 0;
return NULL;
}
int res = 0;
// 求ans[0]^ans[1];
for(int i = 0; i < numsLen; i++) {
res ^= nums[i];
}
printf("res is %d\n", res);
// 找到res中从后往前第一个出现1的位置
int m = 1;
while((res&m) == 0) {
m <<= 1;
}
printf("m is %d\n", m);
int* ans = (int*)calloc(0, sizeof(int) * 2);
for(int i = 0; i < numsLen; i++) {
if((nums[i]&m) == 0) {
ans[0] ^= nums[i];
}
}
printf("ans[0] is %d\n", ans[0]);
ans[1] = res ^ ans[0];
if(ans[0] > ans[1]) swap(&ans[0], &ans[1]);
*returnSize = 2;
return ans;
}