找出數組中不是成對出現的元素

題目:假設數組中的元素只有一個不是成對出現的,找出該元素(下標).

 

思路:

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];
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章