zoukankan      html  css  js  c++  java
  • LeetCode:Single Number III

    problem:

    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:

    1. The order of the result is not important. So in the above example, [5, 3] is also correct.
    2. Your algorithm should run in linear runtime complexity. Could you implement it using only constant space complexity?

    Credits:
    Special thanks to @jianchao.li.fighter for adding this problem and creating all test cases.

    Subscribe to see which companies asked this question

    Solution:Bit Manipulation

     1 class Solution {
     2 public:
     3     vector<int> singleNumber(vector<int>& nums) {
     4         
     5         int AxorB=0;
     6         for(int i=0;i<nums.size();i++)
     7         {
     8             AxorB^=nums[i];
     9         }
    10         
    11         //取最后一个二进制位  根据区别位将vector中的数分为两个序列
    12         int mask=AxorB&(~(AxorB-1));
    13         int A=0,B=0;
    14         
    15         for(int i=0;i<nums.size();i++)
    16         {
    17             if(mask&nums[i])
    18                 A^=nums[i];
    19             else
    20                 B^=nums[i];
    21                 
    22         }
    23         return vector<int>({A,B});
    24     }
    25 };
  • 相关阅读:
    【leetcode】修剪二叉搜索树
    053-621
    053-620
    053-619
    053-618
    053-617
    053-616
    053-615
    053-614
    053-613
  • 原文地址:https://www.cnblogs.com/xiaoying1245970347/p/5224890.html
Copyright © 2011-2022 走看看