心得:
從數字陣列中找出只有出現過一次的數字並傳出,這題原本我想說很簡單用一句LinQ就可以交差了,結果一個超時QQ…
最後看了Top Solution還是不太懂只好求助古狗大神並尋求朋友協助,最後才理解了數學的奇妙 !!
解題思路:

根據XOR的真值表,我們用陣列[1, 2, 3, 4, 1, 2, 3]來測試,轉換為二進位的話則是[001, 010, 011, 100, 001, 010, 011]接著運算如下:
^ = 運算子 = XOR
- 001^- 010= 011
- 011 ^ 011= 000
- 000 ^ 100= 100
- 100 ^ 001= 101
- 101 ^ 010= 111
- 111 ^ 011= 100
- 100 轉十進位則是 4,由此可知答案是4
問題:
Given an array of integers, every element appears twice except for one. Find that single one.
答案:
- Normal
public class Solution { public int SingleNumber(int[] nums) { int ans = nums[0]; for (int i = 1; i < nums.Length; i++) { ans ^= nums[i]; } return ans; } }
- LinQ (Time Out)
public class Solution { public int SingleNumber(int[] nums) { return nums.Where(x => nums.Count(y => x == y) == 1).SingleOrDefault(); } }
參考:
- 邏輯異或
- 大神朋友
