如:
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;
}