【leetcode】只出現一次的數字
阿新 • • 發佈:2018-12-19
只出現一次的數字
一、要求
給定一個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。
說明:
你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?
示例 1:
輸入: [2,2,1] 輸出: 1
示例 2:
輸入: [4,1,2,1,2] 輸出: 4
二、思路
首先看清題意
要求具有線性時間複雜度,即O(N),那麼我們的程式碼中不能帶有巢狀迴圈。
還要求不適用額外的空間,即空間複雜度為O(1),不使用諸如新陣列或HashSet等
除了一個只出現過一次的數字外,其他數字都出現過兩次,有沒有辦法讓這些出現過兩次的數字相互抵消,那麼剩下來的那個數字就是我們要的答案。
使用異或,相同的數字經過異或運算後,會變成0,0再和那個只出現過一次的數字異或,運算結果還是那個數字,那麼我們只需要定義一個result變數,初始為0,遍歷陣列,與陣列中的元素進行異或即可。
三、程式碼實現
public int singleNumber(int[] nums) { int result = 0; for (int temp : nums) { result ^= temp; } return result; }