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

  • 相关阅读:
    JS一些概念知识及参考链接
    CSS中浮动属性float及清除浮动
    前端一些概念知识及参考链接
    CSS中属性百分比的基准点
    CSS中的单位
    css居中问题
    Vue使用的扩展
    vue使用中的问题总结
    CSS中的position属性
    CSS中的flex布局
  • 原文地址:https://www.cnblogs.com/hellowooorld/p/6973929.html
Copyright © 2011-2022 走看看