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

  • 相关阅读:
    一文搞懂字符集
    机器视觉之eVision
    PID调节
    激光切割质量主要影响因素
    155. 最小栈
    111.二叉树最小深度
    110. 平衡二叉树
    108.将有序数组转换为二叉搜索树
    107. 二叉树的层次遍历 II
    104. 二叉树的最大深度
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/6973929.html
Copyright © 2011-2022 走看看