美文网首页
数组中只出现一次的数

数组中只出现一次的数

作者: hades2013 | 来源:发表于2018-09-27 20:49 被阅读0次

题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。
方法一:

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
           if(data.size() < 2)
            return;
          
        int resultExclusiveOR = 0;
        for(int i = 0; i < data.size(); i++){
            resultExclusiveOR ^= data[i];
        }
          
        unsigned int indexOf1 = FindFirstBitIs1(resultExclusiveOR);
          
        *num1 = *num2 = 0;
        for(int j = 0; j < data.size(); j++){
            if(IsBit1(data[j], indexOf1))
                *num1 ^= data[j];
            else
                *num2 ^= data[j];
        }

    }
     unsigned int FindFirstBitIs1(int num){
        int indexBit = 0;
        while(((num & 1) == 0) && (indexBit < 8*sizeof(int))){
            num = num >> 1;
            indexBit++;
        }
          
        return indexBit;
    }
      
    bool IsBit1(int num, unsigned int indexBit){
        num = num >> indexBit;
        return (num&1);
    }
};

方法二:

public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
         
        int len=data.size();
        if(len<=2) return;
         
        int one=0;
        for(int i=0;i<len;i++)
        {
            one=one^data[i];
        }
         
        int pos=0;
        int flag=1;
        while(flag)
        {
            if(one&flag)
                break;
            flag=flag<<1;
            pos++;
        }
         
        for(int i=0;i<len;i++)
        {
            if((data[i]&flag)) *num1=*num1^data[i];
            else *num2=*num2^data[i];
        }
    }
     
};

方法三:

class Solution {
public:
    void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {
     int size=data.size();
     map<int,int>mp;
     for(int i=0;i<size;++i)
     {
         mp[data[i]]++;
     }
     map<int,int>::iterator it;
     int m=0;
     for(it=mp.begin();it!=mp.end();++it)
      {
         if(it->second==1)
         {
             if(m==0)
             {
                 *num1=it->first;
                 ++m;
             }
             else
             {
                 *num2=it->first;
                 break;
             }
              
         }
     }
    }
};

相关文章

  • 数组中只出现一次的数

    题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。方法一: 方...

  • 找出数组中只出现一次的数

    Single Number Given an array of integers, every element a...

  • 面试题56(1):数组中数字出现的次数

    题目 数组中只出现一次的两个数字一个整型数组里除两个数字之外,其他数字都出现两次。请写程序找出这两个只出现一次的数...

  • LeetCode 数组算法练习

    数组去重 只出现一次 交集 加一 移动零 两数之和

  • leetcode 136

    相同数异或为0,不同数异或为1,所以很容易找到数组中只出现一次的数。 int普遍是32位,而size_t在主流平台...

  • leetcode探索初级算法之数组

    推荐:只出现一次的数字,旋转数组,两个数组的交集 II 和 两数之和。 1. 删除排序数组中的重复项 给定一个排序...

  • Leetcode之数组篇

    1.从排序数组中删除重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数...

  • 完美世界面试

    1.。面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次) 题目:一个整型数组里除了两个数字之外,其...

  • [剑指offer]刷题笔记

    整数中1出现的次数 第一个只出现一次的字符 把数组排成最小的数 整数中1出现的次数 题目描述:求出113的整数中1...

  • 面试题56(2):数组中唯一只出现一次的数字

    题目 在一个数组中除一个数字只出现一次之外,其他数字都出现了三次,请找出那个只出现一次的数字 解题思路 因为一个数...

网友评论

      本文标题:数组中只出现一次的数

      本文链接:https://www.haomeiwen.com/subject/yheyoftx.html