• 从数组中找到只出现一次的两个数


     1 import java.util.Arrays;
     2 
     3 public class Split {
     4     
     5     public static void main(String[] args)
     6     
     7     {
     8         
     9         int data[]={2,4,3,5,6,5,2,6};
    10         int[] num1 = new int[data.length];
    11         int[] num2= new int[data.length];
    12         FindApperanceOnce(data,num1,num2);
    13         /*System.out.println(Arrays.toString(num1));
    14         System.out.println(Arrays.toString(num2));*/
    15         /*find(num1);
    16         find(num2);*/
    17         
    18     }
    19     
    20     
    21     public static void FindApperanceOnce(int data[],int [] num1,int [] num2)
    22     {
    23         if(data ==null || data.length<2)
    24             return;
    25         int result = 0; //^
    26         for(int i =0;i<data.length;i++)
    27         {
    28             result ^=data[i];//异或结果肯定不为0,因为有两个不相同的数字
    29         }
    30         int indexOf1 = FindFirstBitIs1(result);//找到第一个为1的位
    31         System.out.println(result+"**"+indexOf1+"**");
    32         for(int j=0;j<data.length;j++)
    33         {
    34             if(IsBit1(data[j],indexOf1)==1)
    35             {
    36                 num1 [j]^=data[j];  //将原数组根据第indexOf1位是不是1分为两个子数组
    37             }
    38             else
    39                 num2[j] ^= data[j];
    40         }
    41         find(num1);
    42         find(num2);
    43         
    44         
    45     }
    46 
    47     private static int IsBit1(int num, int indexBit) {
    48         // TODO Auto-generated method stub
    49         num = num>>indexBit;
    50         
    51         return (num & 1);
    52     }
    53 
    54     //找出数字num的二进制位中,第一个为1的位数。
    55     private static int FindFirstBitIs1(int num) {
    56         // TODO Auto-generated method stub
    57         int indexBit = 0;
    58         while((num&1)==0)
    59         {
    60             num>>=1;
    61             ++indexBit;
    62         }
    63         return indexBit;
    64     }
    65     //从数组中找到唯一一个只出现一次的数字
    66     private static void  find(int[] data)
    67     {
    68         int result =0;
    69         for(int i=0;i<data.length;i++)
    70         {
    71             result^=data[i];
    72         }
    73         System.out.println(result);
    74     }
    75 }
  • 相关阅读:
    WC项目
    团队项目(MVP新能源无线充电管理网站)(总结)
    学期目标
    个人目标、思维导图、不同点
    结对项目——黄金分割点游戏(陈香宇&蔡春燕)
    团队项目(MVP新能源无线充电管理网站)(个人任务2)
    四则运算
    读后疑问
    crontab 定时任务
    mysql主从配置
  • 原文地址:https://www.cnblogs.com/happinessqi/p/3512866.html
Copyright © 2020-2023  润新知