日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【LeetCode】-- 260. Single Number III

發布時間:2025/6/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【LeetCode】-- 260. Single Number III 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

問題描述:

  https://leetcode.com/problems/single-number-iii/

  在一個數組里面,只有兩個元素僅出現過1次,其余都出現過兩次。找出出現僅一次的那兩個(a, b)。

要求常量空間,線性時間。

問題解決:

  這題用到“神奇的位運算”。

  1.因為除了特殊的兩個元素,其余兩兩出現,那么就想到了XOR(異或)。

  2.從頭到尾XOR之后,會得到a xor b 的結果。接下來我們試著把這兩個元素分離開來。

  3.我們在a xor b 中找到任意一位XOR[diff_pos] = 1 , 那么可知在diff_pos這位上a 和 b 是不一樣的。如果按照diff_pos這位的值

  分類可以將所有數分成兩組: 1)diff_pos = 0的元素, 2)diff_pos = 1的元素。

  4.對3中的兩組分別組內xor,因為其余元素都是 兩兩出現,那么最后就剩下a / b 了。

代碼如下:

class Solution(object):def singleNumber(self, nums):xor = 0for num in nums:xor = xor^numdiff_pos = 0for i in range(31):if(xor & (1 << i)):diff_pos = ibreakrec = [0,0]for num in nums:if(num & (1 << diff_pos)):rec[1] ^= numelse:rec[0] ^= numreturn rec

  論文還沒看,又在瞎搞了。。。

找最右邊的1比特位確實有更好的方法:

xor = xor & ~(xor - 1);

?

轉載于:https://www.cnblogs.com/luntai/p/5573932.html

總結

以上是生活随笔為你收集整理的【LeetCode】-- 260. Single Number III的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。