LeetCode 137 只出現一次的數字 II

2022-05-21 23:06:13 字數 1111 閱讀 5561

雖然要求不開闢額外空間與o(n)的時間複雜度, 單由於資料比較水. 靠排序依然能過, 所以花了點時間想了想

數字去重, 時間複雜度o(n)且不開闢額外空間, 那麼就該從位運算入手了

某個元素只出現一次, 其餘每個元素出現3個, 則把每乙個數字拆分為二進位制, 經過拆分求和之後每一位上只有3x3x + 1, 經過%3後就完成了去重工作

由此題意變成, 通過位運算設計加法器%3操作的數位電路

由於最大數字為3, 至少需要2bit才能實現運算

設運算數的低位為a, 高位為b, 輸入為v

每次計算結束時低位為an, 高位為bn

位運算符號使用c語言版本

至於具體設計, 就自由發揮了

以下示意圖均為隨手瞎畫, 沒有遵循任何數字電路圖規範_(:з」∠)_

方法一方法二

方法三由於an的推導基本是一樣的, 這裡只列出an部分的推導

將圖轉化為等式

c = a ^ v

d = a & v

e = b | d

f = c ^ e

an = c & f

bn = e & f

an = c & f

= c & (c^e)

= c & (~e)

= c & (~(b|d))

= (a^v) & (~b) & (~d)

= (a^v) & (~b) & (~(a&v))

= (a^v) & (~b) & (a|v)

= (a^v) & (~b)

int singlenumber(int* nums, int numssize)

return a;

}

Leetcode137 只出現一次的數字

題目描述 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,3,2 輸出 3 示例 2 輸入 0,1,0,1,0,1,99 輸出 99 思路 對數字中數...

leetcode 137 只出現一次的數字 II

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?這種純數字計算的問題,如果我們只用加減乘除就能做出來,那leetcode就太low了,這種問題,應該深入到位級別運算。思考,將...

leetcode137 只出現一次的數字詳解

原題連線 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現了三次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?示例 1 輸入 2,2,3,2 輸出 3 示例 2 輸入 0,1,0,1,0,1,99 輸出 99 3 函式f實現的...