給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:
你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1]
輸出: 1
示例 2:
輸入: [4,1,2,1,2]
輸出: 4
實現說明-1:
1、首先對陣列進行排序
2、一次遍歷,兩個一組判斷數字是否相等,相等繼續,不相等則找出答案。
static int compar(const void *num1, const void *num2 )
int singlenumber(int *nums, int numssize)
qsort(nums, numssize, sizeof(int), compar);
for (i = 0; i < numssize - 1; i += 2)
}return nums[numssize - 1];
}
實現說明-2:
如上演算法雖然可以得到此題的答案,但是並不能,滿足線性時間複雜度的要求,因為對陣列的排序和遍歷查詢使得陣列會存在多次遍歷。
從題中其餘元素只出現兩次的特徵可以想到使用異或運算。
異或運算:
1)相同的數異或結果是:0
2)不同的數異或結果是:1
基於異或運算,陣列中所有的數全部異或運算一次即可以得到只出現一次的數。
實現如下:
int singlenumber(int *nums, int numssize)
return num;
}
leetcode 陣列 只出現一次的數字
給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,1 輸出 1示例 2 輸入 4,1,2,1,2 輸出 4思路 異或法,根據異或運算的特點,相同的數字經過...
陣列中只出現一次
首先看看題目要求 陣列a中,除了某乙個數字 x之外,其他數字都出現了三次,而 x出現了一次。請給出最快的方法找到x。這個題目非常有意思,在本人部落格中有 位操作基礎篇之位操作全面總結 這篇文章介紹了使用位操作的異或來解決 陣列中其他數字出現二次,而x出現一次,找出x。有 這邊文章介紹了分組異或的方法...
LeetCode 陣列 2 只出現一次的數字
1.只出現一次的數字 給定乙個整數陣列,除了某個元素外其餘元素均出現兩次。請找出這個只出現一次的元素。分析 1.利用異或位運算的特性 int singlenumber vector nums result count 3 3.只出現一次的數字 iii 給定乙個整數陣列 nums,其中恰好有兩個元素只...