zoukankan      html  css  js  c++  java
  • 73. 数组中只出现一次的两个数字

    异或运算,看视频吧。AcWing 73. 数组中只出现一次的两个数字

    https://www.acwing.com/solution/acwing/content/1324/

    假设这2个数为x,y

    1.对所有数进行异或,相同的2个数执行异或后的值为0。结果就是x⊕y.

    2.异或运算的性质:.若a是二进制数0101,b是二进制数1011;则a⊕b=1110 ,只有在两个比较的位不同时其结果是1,否则结果为0。

    可以肯定的是,x⊕y的结果有某一位k是1。利用第k位是1,将数组分成2类数组,数组m是Z=1,另一数组n是Z=0。

    x和y分别在m、n中。

    3.对m、n中的元素分别进行异或,可以得到x,y.

    class Solution {
    public:
        vector<int> findNumsAppearOnce(vector<int>& nums) {
            int sum = 0;
            for(auto x : nums) sum ^=x;
            int k = 0;
            while(!(sum>>k & 1))k++;  //k中存的是x异或y中某一位是1的那位
            int first = 0;
            for(auto x: nums)
                if(x>>k&1)
                    first ^= x;//对第k位为1的集合进行异或,求出第一个出现一次的数字x
            return vector<int>{first,sum^first};//sum^first,求出第二个出现一次的数字y
        }
    
    };
    带女朋友搬家新家条件不好,累到女朋友了,让女朋友受苦了,特此明志:每天学习,明年这个时候(20190812)让女朋友住上大房子,永远年轻,永远热泪盈眶,很多人都是这样,他们都把自己当成身在梦中一样,浑浑噩噩地过日子,只有痛苦或爱或危险可以让他们重新感到这个世界的真实。
  • 相关阅读:
    正则表达式
    模块的初始
    装饰器 1
    匿名函数
    内置函数一(待跟新)
    python 学习迭代器的认识
    python 学习笔记 —— 函数的认识
    搭建yum 源
    python 学习第六天 文件的处理方式
    python 学习第五天 字典得 增删改查
  • 原文地址:https://www.cnblogs.com/make-big-money/p/12339887.html
Copyright © 2011-2022 走看看