zoukankan      html  css  js  c++  java
  • [leetcode-260-Single Number III]

    Given an array of numbers 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.
    For example:
    Given nums = [1, 2, 1, 3, 2, 5], return [3, 5].
    Note:
    The order of the result is not important. So in the above example, [5, 3] is also correct.
    Your algorithm should run in linear runtime complexity.
    Could you implement it using only constant space complexity?

    思路:

    1.assume that A and B are the two elements which we want to find;

    2.use XOR for all elements,the result is : r = A^B,we just need to distinguish A from B next step;

    3.if we can find a bit '1' in r,then the bit in corresponding position in A and B must be different.We can use {last = r & (~(r-1))} to get the last bit 1 int r;

    4.we use last to divide all numbers into two groups,then A and B must fall into the two distrinct groups.XOR elements in eash group,get the A and B.

    vector<int> singleNumber1(vector<int>& nums) {
             int r = 0, n = nums.size(), i = 0, last = 0;
             vector<int> ret(2, 0);
    
             for (i = 0; i < n; ++i)
                 r ^= nums[i];
    
             last = r & (~(r - 1));
             for (i = 0; i < n; ++i)
             {
                 if ((last & nums[i]) != 0)
                     ret[0] ^= nums[i];
                 else
                     ret[1] ^= nums[i];
             }
    
             return ret;
         }

    参考:

    https://discuss.leetcode.com/topic/34545/share-my-c-solution

  • 相关阅读:
    0814防盗链访问控制代理
    0811Nginx访问日志设置
    0810Nginx安装
    0809LNMP架构介绍
    PHP安装
    mariaDB安装Apache安装(httpd)
    LAMP构架介绍
    shell基础知识(2)
    shell基础知识(1)
    yum更换国内源、yum下载rpm包、源码包安装
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/6973929.html
Copyright © 2011-2022 走看看