20170515_使用异或运算求出孤独数

本文介绍了一种利用异或运算找出数组中唯一不重复元素的方法。通过实例详细展示了异或运算的过程,并提供了一段C++代码实现。适用于寻找线性时间复杂度下不重复的单一元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20170515_使用异或运算求出孤独数


  思想:
两个相同的数异或结果为0,不同为1 ,根据该规则下列过程如下
假设 数组为 2,3,2,3,4,1,4
那么结果应该为1
2^3=0000 0010 ^ 0000 0011 = 0000 0001   1
1^2=0000 0001 ^ 0000 0010 = 0000 0011    3
3^3=0000 0011 ^ 0000 0011 =  0000 0000    0
0^4=0000 0000 ^ 0000 0100 = 0000 0100  4
4 ^ 1 =0000 0100 ^ 0000 0001 = 0000 0101 5
5 ^ 4= 0000 0101 ^ 0000 0100 =0000 0001  1
整个过程如上,最后结果为1。

代码:

//136. Single Number 
//Given an array of integers, every element appears twice except for one. 
//Find that single one.
//Note:
//Your algorithm should have a linear runtime complexity.
//Could you implement it without using extra memory? 
#include<iostream>
#include<vector>
using namespace std;

void Outdata(vector<int> &a)
{
	auto beg=a.begin();
	for(; beg!=--a.end(); ++beg)
		cout<<*beg<<",";
	cout<<*beg<<endl;
}

class Solution
{
public:
    int singleNumber(vector<int> &nums)
	{
		int result=0;
        for(auto n:nums)
			result=result^n;
		return result;
    }
};

int main()
{
	vector<int> a;
	int ch;
	cout<<"依次输入数据:"<<endl;
	while(cin>>ch)
		a.push_back(ch);
	cout<<"输入的数据是:"<<endl;
	Outdata(a);
	Solution example;
	int result;
	result=example.singleNumber(a);
	cout<<"查找到的那个孤单数:"<<result<<endl<<endl;

	system("pause");
	return 0;
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值