安全オファーを証明 - 56の面接の質問 - I.回配列(または排他的、パケット)で表示される番号

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,10][10,2]
 
限制:
2 <= nums <= 10000

出典:滞在ボタン(LeetCode)
リンクします。https://leetcode-cn.com/problems/shu-zu-zhong-shu-zi-chu-xian-de-ci-shu-lcof
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。

同様のトピック:

136 LeetCodeが表示されますのみデジタル(排他的論理和^)一度
LeetCode 137デジタルのみ表示されますII(ビット演算)を1回

2.問題解決

  • 2つの数の全ての排他的論理和、排他的論理和値の配列のすべての値が望んでいたの要件を取得するために
  • 排他的OR 1の実測値bit
  • 有するbit、すなわち、一意の数値は2から、排他的論理和の値を求め、それぞれ、2つのグループに分けする配列の値
class Solution {
public:
    vector<int> singleNumbers(vector<int>& nums) {
    	int i, XOR = 0;
    	for(i = 0; i < nums.size(); ++i)
    		XOR ^= nums[i];

    	for(i = 0; i < 32; ++i)
    	{
    		if(XOR & (1<<i))
    			break;
    	}
    	int a = 0, b = 0;
    	for(auto& n : nums)
    	{
    		if(n&(1<<i))
    			a ^= n;
    		else
    			b ^= n;
    	}
    	return {a, b};
    }
};

ここに画像を挿入説明

公開された718元の記事 ウォンの賞賛723 ビュー220 000 +

おすすめ

転載: blog.csdn.net/qq_21201267/article/details/104827266