陣列中數字出現的次數 位運算的運用

2021-10-02 23:24:53 字數 1006 閱讀 9468

背景知識:

若x是任意整數, 則有:

x^x=0;

x^0=x;

三道題:

乙個陣列,其中只有乙個數隻出現一次,其他數字均出現兩次,求只出現一次的數

答:將所有數異或一遍,最終結果即所求

乙個陣列,其中有兩個數隻出現一次,其他數字均出現兩次,求只出現一次的數

答:記只出現一次的數分別為a, b;

所有數字異或和的值為a^b!=0;

記a^b的二進位制表示在inx位上為1;

陣列中在inx位上為1的數字的異或和為a, 陣列在inx位上為0的數字的異或和為b;

乙個陣列,其中只有1個數只出現一次,其他數均出現三次;

cnt[i]記錄二進位制表示在i位上為1的數字的出現次數;

出現一次的數字的每一位上1出現的次數均模3等於1;

然後將模三等於1的位置為1就是答案

問題一

class

solution

};

問題二

class

solution

vector<

int> vec;

vec.

push_back(0

);vec.

push_back(0

);int cnt, t;

for(

int i=

0; isize()

; i++)if

(t&1

) vec[0]

^=nums[i]

;else vec[1]

^=nums[i];}

return vec;}}

;

問題三

class

solution

}for

(int i=

0; i<=

32; i++

)return ans;}}

;

陣列中數字出現的次數

題目 乙個整型陣列 nums 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 示例 1 輸入 nums 4,1,4,6 輸出 1,6 或 6,1 示例 2 輸入 nums 1,2,10,4,1,4,3,3 輸出 2,10 或 1...

陣列中數字出現的次數

陣列中數字出現的次數 乙個整型陣列nums裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。要求時間複雜度是o n 空間複雜度是o 1 示例 1 輸入 nums 4,1,4,6 輸出 1,6 或 6,1 示例 2 輸入 nums 1,2,10,4,1,4,3,3 輸出 2,...

陣列中數字出現的次數

乙個整型陣列 nums 裡除兩個數字之外,其他數字都出現了兩次。請寫程式找出這兩個只出現一次的數字。define crt secure no warnings include include include 異或 intcontinuousxor int arr,int sz return ret ...