问题描述

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

解题思路

如果数组中只有一个数字出现奇数次,则将数组中所有的数字做异或可得该数字。

数组中有两个数字出现奇数次,设这两个数字分别为a、b,则将数组中所有的数字做异或得到的是a与 b异或的结果,设为xor。

数字a与b不同,则a与b的二进制表示中至少存在1位不同,xor二进制表示中为1的位即是a与b不同的位,假设a与b的第k位不同,a在该位上为1,b在该位上为0 。(k可以选取为从起始位开始的第一个不同的位)

则可以根据数字第k位的取值情况将数组分为两个字数组,第k位为1的子数组必包含a与其他出现偶数次的数字(相同的数字第k位肯定相同),第k位为0的子数组必包含b与其他出现偶数次的数字。

子数组中的数字做异或可分别得到数字a与b。

实现代码

    //num1,num2分别为长度为1的数组。传出参数
//将num1[0],num2[0]设置为返回结果
public void findNumsAppearOnce(int[] array, int num1[], int num2[]) {
// 得到两个数字的异或结果xor
int xor = 0;
for (int i=0; i<array.length; i++) xor ^= array[i]; // 求两个数字第一个不同的位, 有temp记录
// 若temp=00100000 表示两个数字的第6位不同
int temp = 1;
while ((xor & 1) != 1) {
temp = temp << 1;
xor = xor >> 1;
} // 根据temp将数组分为两个子数组,并分别做异或
num1[0] = 0;
num2[0] = 0;
for (int i=0; i<array.length; i++)
if ((array[i]&temp) == temp) num1[0] ^= array[i];
else num2[0] ^= array[i];
}

数组中只出现一次的数字(java实现)的更多相关文章

  1. 九度OJ 1351 数组中只出现一次的数字

    题目地址:http://ac.jobdu.com/problem.php?pid=1351 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输 ...

  2. leetcode 136. Single Number 、 137. Single Number II 、 260. Single Number III(剑指offer40 数组中只出现一次的数字)

    136. Single Number 除了一个数字,其他数字都出现了两遍. 用亦或解决,亦或的特点:1.相同的数结果为0,不同的数结果为1 2.与自己亦或为0,与0亦或为原来的数 class Solu ...

  3. 剑指Offer 40. 数组中只出现一次的数字 (数组)

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了偶数次.请写程序找出这两个只出现一次的数字. 题目地址 https://www.nowcoder.com/practice/e02fdb54 ...

  4. 剑指Offer - 九度1351 - 数组中只出现一次的数字

    剑指Offer - 九度1351 - 数组中只出现一次的数字2013-11-23 01:23 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. ...

  5. 【剑指Offer】40、数组中只出现一次的数字

      题目描述:   一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字.要求时间复杂度为O(n),空间复杂度为O(1).   解题思路:   这道题目相对比较难 ...

  6. 剑指offer:数组中只出现一次的数字

    题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路分析: 1. 直接想法,每个数字遍历,统计出现次数,复杂度O(n^2),超时. 2. 借助 ...

  7. 《剑指offer》数组中只出现一次的数字

    本题来自<剑指offer> 数组中只出现一次的数字 题目: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 思路: 思路一:在<剑指of ...

  8. 【剑指Offer】数组中只出现一次的数字 解题报告(Python)

    [剑指Offer]数组中只出现一次的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-intervie ...

  9. 剑指offer-第六章面试中的各项能力(数组中只出现一次的数字)

    题目:输入一个数组,该数组中有两个只出现一次的数字,其他的数字都出现两次,输出出只出现一次的数字. 思路:首先,我们可以将这个数组分成两份,一份里面放一个只出现一次的数字.那么我们该怎么分呢?将整个数 ...

  10. 九度OJ 1351:数组中只出现一次的数字 (位运算)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:3098 解决:906 题目描述: 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 输入: 每个 ...

随机推荐

  1. 使用pm2 管理node服务后台运行

    npm run dev的服务想放在服务器上,但是putty一断服务就没了. 网上差了下forever和pm2用的比较多,尤其是pm2 简直太好用了.. 具体操作如下 安装 npm install -g ...

  2. npm下设置NODE_ENV下mac与windows的差异

    linux & mac: export NODE_ENV=production windows:set NODE_ENV=production windows: mac:

  3. yii中接收微信传过来的json数据

    //控制器<?php namespace frontend\controllers; use frontend\models\User; use yii; use yii\web\Control ...

  4. ORA错误总结

    ORA-12560 协议适配器错误 可能是以下原因: 1:服务没有开启(oracle的服务,oraclehome92TNSlistener) 2:数据库实例没有开启(oracleserviceORCL ...

  5. pandas的数据结构之series

    Pandas的数据结构 1.Series Series是一种类似于一维数组的对象,由下面两个部分组成: index:相关的数据索引标签 values:一组数据(ndarray类型) series的创建 ...

  6. VMware 虚拟机centos下链接网络配置

    1.点击Network Adapter 设置如下图所示,首先我们在虚拟机中将网络配置设置成NAT, 2.计算机右键->管理->服务和应用程序->服务,启动如下两个服务 3.在etc/ ...

  7. Python3+mitmproxy安装使用教程(Windows)

    一.安装 1.1 安装mitmproxy 直接使用pip安装即可 pip install mitmproxy pip本质上会一是安装mitmproxy库的相关代码,二是安装mitmproxy.exe/ ...

  8. 常用模块Part(2)

    logging模块 hashlib模块 hashlib模块 Python的hashlib提供了常见的摘要算法,如MD5,SHA1等等. # 什么是摘要算法呢?摘要算法又称哈希算法.散列算法.它通过一个 ...

  9. javascript接口注释法

    //注释法//简单,功能弱 利用 大型的项目靠得是规范和标准 有充分时间 缺点:人为的遵守/** interface personDao{* function add(obj);* function ...

  10. 泥瓦工vps

    http://blog.sina.com.cn/s/blog_16a3cb7cb0102xbvd.html