异或定理
来源:互联网 发布:彭博商业周刊 知乎 编辑:程序博客网 时间:2024/05/22 15:08
由n个元素组成的数组,n-2个数出现了偶数次,两个数出现了奇数次,且这两个数不相等,如何用O(1)的空间复杂度,找出这两个数
思路分析:
方法一:涉及到两个数,就要用到异或定理了:若a^b=x,则a=b^x,b=x^a。对于这道题,假设这两个数分别为a、b,将数组中所有元素异或之后结果为x,因为a!=b,所以x=a^b,且x!=0,判断x中位为1的位数,只需要知道某一个位为1的位数k,如00101100,k可以取2或者3,或者5.因为x中第k位为1表示a或b中有一个数的第k位也为1,假设为a,将x与数组中第k位为1的数进行异或时,也即将x与a以及其他第k位为1的出现过偶数次的数进行异或,化简即为x与a异或,最终结果即为b。
#include "stdafx.h"#include<string>using namespace std;void FinNum(int A[],int len){int s= 0;int count = 0;int a = 0;int b = 0;for (int i = 0; i < len; i++)s = s^A[i];int s1 = s;while (!(s1 & 1)){s1 = s1 >> 1;count++;}b = s;for (int i = 0; i < len; i++){if ((A[i]>>count)&1)b = b^A[i];}a = b^s;printf("a=%d , b=%d", a,b);}int main(){int A[] = { 1, 2, 3, 2, 4, 3, 5, 1 };int len_ = 8;FinNum(A, len_);return 0;}
阅读全文
0 0
- 异或定理
- 【codechef】n个数,多少种取法的异或值==m【二项式定理】
- 乘法逆元 (扩展欧几里得或费马小定理)
- 乘法逆元 (扩展欧几里得或费马小定理)
- Couple doubi(费马小定理或打表找规律+简单博弈)
- 关于树或二叉树的一些定理和结论
- poj1129Channel Allocation 乱做,dfs或+四色定理
- 乘法逆元(扩展欧几里得或费马小定理)
- 乘法逆元(扩展欧几里得或费马小定理)
- 定理
- 定理
- 逆元的几种求法(扩展欧几里得,费马小定理或欧拉定理,特例,打表等)
- 与, 或, 异或
- [ACM] hdu 3923 Invoker (Poyla计数,快速幂运算,扩展欧几里得或费马小定理)
- hdu1695((容斥定理+欧拉函数)或(莫比乌斯反演))
- 异或
- 异或
- 异或
- ADMUI文件无法删除
- win8.1中Xshell输入中文显示问号问题
- 非静态内部类创建静态实例造成的内存泄漏
- web 信息搜索之指纹识别篇
- 代码实现(一): 用Python抓取指定页面
- 异或定理
- IP地址在数据库里面的存储方式
- .NET MVC在中控制器返回的bool类型数据的使用
- 进程异常退出 EIO input/output error
- 舵机工作原理及程序
- 好心分手
- 创建并部署自签名的 SSL 证书到 Nginx
- Java验证身份证是否合法
- Git 常用操作(十一) vim 简单操作