題目:假設數組中的元素只有一個不是成對出現的,找出該元素(下標).
思路:
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];
}