單獨的數字

2021-08-01 20:00:01 字數 902 閱讀 6683

解法一:

class

solution

res |= (sum % 3) <

}return

res;}};

還有一種解法,思路很相似,用3個整數來表示int的各位的出現次數情況,one表示出現了1次,two表示出現了2次。當出現3次的時候該位清零。最後答案就是one的值。

ones代表第ith 位只出現一次的掩碼變數

twos代表第ith 位只出現兩次次的掩碼變數

threes代表第ith 位只出現三次的掩碼變數

解法二:

class

solution

return

one;}};

下面這種解法思路也十分巧妙,根據上面解法的思路,我們把陣列中數字的每一位累加起來對3取餘,剩下的結果就是那個單獨陣列該位上的數字,由於我們累加的過程都要對3取餘,那麼每一位上累加的過程就是0->1->2->0,換成二進位制的表示為00->01->10->00,那麼我們可以寫出對應關係:

00 (+) 1 = 01

01 (+) 1 = 10

10 (+) 1 = 00 ( mod 3)

那麼我們用ab來表示開始的狀態,對於加1操作後,得到的新狀態的ab的演算法如下:

b = b xor r & ~a;

a = a xor r & ~b;

明白了上面的分析過程,就能寫出**如下;

解法三:

class

solution

return

b; }

};

類似題目:

single number

single number iii

單獨的數字

題目描述 給定乙個陣列 a 除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 7 你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 輸入第一行輸入乙個數 n 1 leq n leq 500 代表陣列的長度。接下來一行輸入 n 個 int 範圍內 2147483648 l...

單獨的數字 python

給定乙個陣列 aa,除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 77。你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 第一行輸入乙個數 n 1 leq n leq 500 n 1 n 500 代表陣列的長度。接下來一行輸入 nn 個 int 範圍內 214748...

單獨的數字 位運算

時間限制 1000ms 記憶體限制 65536k 給定乙個陣列 a 除了乙個數出現一次之外,其餘數都出現三次。找出出現一次的數。如 找出 7 你的演算法只能是線性時間的複雜度,並且不能使用額外的空間哦 第一行輸入乙個數 n 1 n 5 00 代表陣列的長度。接下來一行輸入 n 個 int 範圍內 2...