如:
int[] num = new int[8] { -105, 2, 3, 2, -105, 3, 4, 3 }
只出現過一次的數字爲: 4
運用數字的按位“異或”,時間複雜度爲O(1),應該有更好的的辦法吧,就想到了這個。
官方異或運算文檔:按位異或
深入理解按位運算:深入理解運算
private int GetAppearOnceNum(int[] nums)
{
//記錄已重複的數字爲True
Dictionary<int, bool> dicHad = new Dictionary<int, bool>();
int result = 0;
for (int i = 0; i < nums.Length; i++)
{
int num = nums[i];
if (dicHad.ContainsKey(num))
{
if (dicHad[num])
continue;//已重複過的數字不進入 按位”異或“
else
dicHad[num] = true;
}
else
dicHad.Add(num, false);
//int lastResult = result;
//數字進行按位”異或“
result = result ^ num;
//Debug.Log(lastResult + "-->" + result);
}
Debug.Log(result);
return result;
}