<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          ?LeetCode刷題實(shí)戰(zhàn)260:只出現(xiàn)一次的數(shù)字 III

          共 3056字,需瀏覽 7分鐘

           ·

          2021-05-10 14:30

          算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

          今天和大家聊的問題叫做 只出現(xiàn)一次的數(shù)字 III,我們先來(lái)看題面:
          https://leetcode-cn.com/problems/single-number-iii/

          Given an integer array nums, in which exactly two elements appear only once and all the other elements appear exactly twice. Find the two elements that appear only once. You can return the answer in any order.


          Follow up: Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?

          給定一個(gè)整數(shù)數(shù)組 nums,其中恰好有兩個(gè)元素只出現(xiàn)一次,其余所有元素均出現(xiàn)兩次。找出只出現(xiàn)一次的那兩個(gè)元素。你可以按 任意順序 返回答案。
          進(jìn)階:你的算法應(yīng)該具有線性時(shí)間復(fù)雜度。你能否僅使用常數(shù)空間復(fù)雜度來(lái)實(shí)現(xiàn)?

          示例


          示例 1:

          輸入:nums = [1,2,1,3,2,5]
          輸出:[3,5]
          解釋:[5, 3] 也是有效的答案。

          示例 2:

          輸入:nums = [-1,0]
          輸出:[-1,0]

          示例 3:

          輸入:nums = [0,1]
          輸出:[1,0]


          解題


          我們知道兩個(gè)相同的數(shù)異或之后就為0,所以對(duì)于nums數(shù)組中的所有數(shù),異或之后的結(jié)果就是那兩個(gè)只出現(xiàn)一次的數(shù)異或的值。

          這個(gè)值必然不為0(因?yàn)檫@兩個(gè)數(shù)是不同的),所以這個(gè)數(shù)的二進(jìn)制表示里,從低位往高位必然有一位1,這一位是1,說(shuō)明這兩個(gè)數(shù)在這一位的二進(jìn)制表示不同(因?yàn)檫@個(gè)數(shù)是異或得到的),我們可以以與這一位的1與的結(jié)果為1還是為0,把nums數(shù)組的元素分為兩組,則這兩個(gè)不同的數(shù)必然被分在不同的組。又由于相同的數(shù)異或?yàn)?,所以同一組的數(shù)全部進(jìn)行異或操作,最后兩組剩下的值就分別是這兩個(gè)不同的數(shù)了。


          class Solution {
          public:
              vector<int> singleNumber(vector<int>& nums) {
                  vector<int> res(2, 0); // 分為兩組
                  int sum = 0; // sum是nums所有元素異或的結(jié)果
                  for(int i = 0; i < nums.size(); ++i) {
                      sum ^= nums[i];
                  }
                  int firstOne = sum & (-sum); // 得到最低位的1,sum & (-sum)這是一個(gè)常見的技巧
                  for(int i = 0; i < nums.size(); ++i) {
                      if(firstOne & nums[i]) { // 如果和firstOne相與為1,分到第一組(并且第一組所有元素進(jìn)行異或操作)
                          res[0] ^= nums[i];
                      } else { // 否則到第二組(并且第二組所有元素進(jìn)行異或操作)
                          res[1] ^= nums[i];
                      }
                  }
                  return res;
              }
          };


          好了,今天的文章就到這里,如果覺得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力 。

          上期推文:

          LeetCode1-240題匯總,希望對(duì)你有點(diǎn)幫助!
          LeetCode刷題實(shí)戰(zhàn)241:為運(yùn)算表達(dá)式設(shè)計(jì)優(yōu)先級(jí)
          LeetCode刷題實(shí)戰(zhàn)242:有效的字母異位詞
          LeetCode刷題實(shí)戰(zhàn)243:最短單詞距離
          LeetCode刷題實(shí)戰(zhàn)244:最短單詞距離 II
          LeetCode刷題實(shí)戰(zhàn)245:最短單詞距離 III
          LeetCode刷題實(shí)戰(zhàn)246:中心對(duì)稱數(shù)
          LeetCode刷題實(shí)戰(zhàn)247:中心對(duì)稱數(shù)II
          LeetCode刷題實(shí)戰(zhàn)248:中心對(duì)稱數(shù)III
          LeetCode刷題實(shí)戰(zhàn)249:移位字符串分組
          LeetCode刷題實(shí)戰(zhàn)250:統(tǒng)計(jì)同值子樹
          LeetCode刷題實(shí)戰(zhàn)251:展開二維向量
          LeetCode刷題實(shí)戰(zhàn)252:會(huì)議室
          LeetCode刷題實(shí)戰(zhàn)253:會(huì)議室II
          LeetCode刷題實(shí)戰(zhàn)254:因子的組合
          LeetCode刷題實(shí)戰(zhàn)255:驗(yàn)證前序遍歷序列二叉搜索樹
          LeetCode刷題實(shí)戰(zhàn)256:粉刷房子
          LeetCode刷題實(shí)戰(zhàn)257:二叉樹的所有路徑

          LeetCode刷題實(shí)戰(zhàn)258:各位相加

          LeetCode刷題實(shí)戰(zhàn)259:較小的三數(shù)之和


          瀏覽 49
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩777 | xxx久久久 | 上海美女操B视频网站 | 天天撸一撸在线免费观看 | 成人免费看片 无需下载 |