找出一個int陣列中僅出現過一次的數字(前提:只有一個這樣的數)
阿新 • • 發佈:2018-11-07
如:
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; }