找出数组中只出现一次的唯一值

// Example program
#include <iostream>
#include <string>

int main()
{
  int a[9] = {109,239,3432,8981,-7,109,239,3432,8981};
  int ans = 0;
  for(auto t : a) {
      ans^=t;
  }
  std::cout<<ans<<std::endl;
  return 0;
}

使用异或运算符将相同的变量一一消去

#include <iostream>
using namespace std;

int find_2_1_2(int n, int* a)
{
    int i;
    int ans=0;
    int ans1=0, ans2=0;
    for(i=0;i<n;i++)
        ans^=a[i];
    std::cout<<"xor all : " << ans<< std::endl;
    int pos=0;
    while(((ans>>pos)&1) != 1)
        pos++;

    std::cout<<"Pose is : "<<pos<<std::endl;
    for(i=0;i<n;i++)
    {
        if(((a[i] >> pos)&1)!=1)
            ans1 ^= a[i];
        else
            ans2 ^= a[i];
    }
    cout<<ans1<<"\n"<<ans2<<endl;
    return 0;
}

int main() {
    int* vec = new int[100];
    for(int i = 0; i < 98; i+=2) {
        vec[i] = 2*i + i;
        vec[i + 1] = 2*i + i;
    }
    vec[98] = -100;
    vec[99] = -98;
    find_2_1_2(100, vec);
    delete[] vec;
    return 0;
}

实现找出两个只出现一次的值,使用异或找出不相同的位,分成两组,分别进行.

posted on 2020-08-21 15:26  庭中核桃树  阅读(238)  评论(0编辑  收藏  举报

导航