陣列中只出現一次的數字

2021-07-14 18:50:53 字數 608 閱讀 4934

題目描述

乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。

演算法:

如果乙個陣列裡只有乙個數字出現了一次,其餘數字都出現兩次的話,可以直接使用異或方法。因為異或就是相同為0,不同為1。對於此題使用異或最合適,出現兩次的數最後對結果都是0沒有貢獻,留下的數字就是出現一次的數字。

題目中是有兩個數字出現一次,可以通過一次異或的結果將陣列拆成兩個子陣列。方法是找到異或結果2進製表示的第一次出現1的位置,這個1肯定是兩個出現一次數字的異或結果(其餘異或的結果在所有位都是0),說明在這一位兩個數字是不同的,那麼可以根據這一位將兩個數字分開,也同時將陣列分開兩部分。

class solution 

//獲取異或結果的第一位1

int count = 0;

//因為異或結果不可能為0,所以找出從右開始的第一次出現1的位置

while ((firstxor & 1) != 1)

//找到了1的位置後,將所有數字右移count位,然後根據該位是否為1分成兩組。

for (int j = 0; j < data.size(); ++j)

}};

陣列中只出現一次的數字

何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。輸入 每個測試案例包括兩行 第一行包含乙個整數n,表示陣列大小。2 n 10 6。第二行包含n個整數,表示陣列元素,元素均為int。輸...

陣列中只出現一次的數字

來自劍指offer 分析 如果整型陣列中只有乙個數字出現一次,我們只需將陣列中每個元素依次做異或操作,最終就得到了只出現一次的數字。因為自己與自己異或後,結果為0.現在,陣列中有兩個數字只出現一次,上述一次遍歷後將所有元素異或得不到那兩個數字。因此,我們試著將原陣列分成兩個子陣列,使每個子陣列中分別...

陣列中只出現一次的數字

package com.google.android public static void main string args int result new int 2 find data,result for int i result private static void find int dat...