如何找出陣列中只出現一次的數字

2021-10-03 07:56:19 字數 1223 閱讀 6839

問題描述: 乙個整型陣列裡除了乙個數字之外, 其他數字都出現了兩次。找出這個只出現1 次的數字。要求時間複雜度是o(n), 空間複雜度是o(1)。

用異或滿**換律來做這道題目:

system.out.

println(4

^7);

// 3

system.out.

println(4

^7^4

);// 7

system.out.

println(4

^7^4

^7);

// 0

當兩個數相同的時候,異或操作得到0

故解此題的**為:

public

static

void

method

(int

a)system.out.

println

("只出現一次的數為:"

+ res)

;//5

}public

static

void

main

(string[

] args)

;method

(a);

}

但是這種方法只適用於,其他數出現的次數為偶數次的情況,如果其他每個數都出現n次(n可以是奇數也可以是偶數),該如果找出只出現一次的那個數呢?

方法如下:

我們建立乙個長度為32的陣列bit,bit[i]儲存的是a陣列中,所有數第i位上為1的總個數。(位數是從右往左數的,最右邊是第0位)

我們將bit陣列中的每乙個數除以3,如果除不盡,說明我們最終要找的那個數在這個位上為1

public

static

intmethod

(int

a)}int res =0;

for(

int i =

0; i < bit.length; i++)}

return res;

}public

static

void

main

(string[

] args)

; system.out.

println

(method

(a))

;// 3

}

找出陣列中只出現一次的數字

乙個整型陣列裡除了乙個數字以外,其他數字都出現了兩次。找出這個只出現一次的數字 異或運算 任何乙個數字異或它本身都等於0,如果從頭到尾異或陣列中的每乙個數字,那些出現兩次的數字全部在異或中會被抵消,最終的結果剛好是這個只出現一次的數字 package jbarray 找出陣列中只出現一次的數字 au...

找出陣列中只出現一次的數字

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。package factory description 只出現一次的數字 author jaryn date 2019 12 2 16 36 public class onenumer return...

40 找出陣列中只出現一次的數字

題目描述 乙個整型陣列裡除了兩個數字之外,其他的數字都出現了兩次。編寫程式找出這個兩個只出現一次的數字。要求時間複雜度o n 空間複雜度o 1 如,輸出 解析 空間複雜度為o 1 斷絕了用hash table的思路,時間複雜度o n 斷絕排序的思路。如何判斷乙個數字出現2次呢?異或的性質 任何數字和...