题目:假设数组中的元素只有一个不是成对出现的,找出该元素(下标).
思路:
1. 设置一个辅助数组result,来标记数组中已经被查找的成对元素,防止重复查找;
2. 遍历当前数组的元素,针对下标为i的元素:
2.1 如果result[i] == 1说明该元素已经被查找过,则跳过;
2.2 如果result[i] == 0,查找j > i的所有元素中是否存在nums[i]的成对元素.如果查找到则标记result[j] = 1;若未查找到则该索引i对应的元素即为需要查找的结果.
int findSingleNumber(int *nums, int numSize) {
// 用以标识已经查找过的元素,防止重复查找
int *result = malloc(sizeof(int) * numSize);
memset(result, 0, numSize * sizeof(int));
int i = 0;
int j = 0;
int index = -1;
while (i < numSize - 1) {
if (result[i] == 0) {
int tem = nums[i];
j = numSize - 1;
while(i < j) {
if (result[j] == 0) {
if (nums[j] == tem) {
// 找到当前元素的成对元素,终止当前元素成对元素的查找
result[j] = 1;
break;
}
}
j--;
}
if (i == j) {
// 未能找到当前元素的成对元素,终止外层循环查找
index = i;
break;
}
}
i++;
}
return nums[index];
}