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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

LeetCode 260. 只出现一次的数字 III(位运算)

發布時間:2024/7/5 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 260. 只出现一次的数字 III(位运算) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

給定一個整數數組 nums,其中恰好有兩個元素只出現一次,其余所有元素均出現兩次。 找出只出現一次的那兩個元素。

示例 :輸入: [1,2,1,3,2,5] 輸出: [3,5]

注意:

結果輸出的順序并不重要,對于上面的例子, [5, 3] 也是正確答案。
你的算法應該具有線性時間復雜度。你能否僅使用常數空間復雜度來實現?

類似題目
LeetCode 137. 只出現一次的數字 II(位運算)
LeetCode 136. 只出現一次的數字(異或^)

2. 解題

  • 先將所有數字異或,等同于那2個不同的數異或 bit
  • 在將上面結果取負并與自己與 bit = bit & -bit,得到 bit 為1的最低位(即那2個數不同的二進制位)
  • 在將給的數組每個數與 bit &,將數組分成2部分,2部分各自做異或^ ,即可得到2個數

關于第二步的舉例:8,13
1000
1101
^
0101 bit
bit & -bit
0001

假如 bit = 1100
bit & -bit = 0100(得到的是最低位的1)

class Solution { public:vector<int> singleNumber(vector<int>& nums) {int bit = 0, i, n1 = 0, n2 = 0;for(i = 0; i < nums.size(); ++i)bit ^= nums[i];bit &= (-bit);for(i = 0; i < nums.size(); ++i){if((bit & nums[i]) == 0)//內層括號!!!不能少n1 ^= nums[i];elsen2 ^= nums[i];}return {n1, n2};} };

總結

以上是生活随笔為你收集整理的LeetCode 260. 只出现一次的数字 III(位运算)的全部內容,希望文章能夠幫你解決所遇到的問題。

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