码迷,mamicode.com
首页 > 编程语言 > 详细

40 数组中只出现一次的数字

时间:2018-05-10 19:58:39      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:符号   结果   程序   设置   font   数组   个数   取反   data   

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

如果数组中只有一个不同的数,全都异或,有2个的话,想办法把这个数组分成2个子数组
例如 4 0100 6 0110 异或后为0010,将第二位是1的数分在一个子数组里,其他数分在另一个子数组里,两个子数组 组内的数都异或 剩下的就是不同的数

 

假如不同数是3,4

异或后为7   00111

-7  10111  符号位不变取反+1 变成11001

相与得00001

可以得到7的最低位1

 

Java:

 1 //num1,num2分别为长度为1的数组。传出参数
 2 //将num1[0],num2[0]设置为返回结果
 3 public class Solution {
 4     public void FindNumsAppearOnce(int [] data,int num1[] , int num2[]) {
 5         int diff = 0 ;
 6         for(int num : data){
 7             diff ^= num ;
 8         }
 9         diff &= -diff ;
10         for(int num : data){
11             if ((num & diff) == 0){
12                 num1[0] ^= num ;
13             }else{
14                 num2[0] ^= num ;
15             }
16         }
17     }
18 }

 

40 数组中只出现一次的数字

标签:符号   结果   程序   设置   font   数组   个数   取反   data   

原文地址:https://www.cnblogs.com/mengchunchen/p/9021365.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!