/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @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; }