zoukankan      html  css  js  c++  java
  • 从数组中找到只出现一次的两个数

     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 }
  • 相关阅读:
    Override 和 Overload 的含义和区别
    Java面向对象的三个特征与含义
    OOM有哪些情况,SOF有哪些情况
    Collection包结构,与Collections的区别
    ConcurrentHashMap
    HashMap 、LinkedHashMap、HashTable、TreeMap 和 Properties 的区别
    Map、Set、List、Queue、Stack的特点与用法
    程序员福利:一种养目法——周履靖《益龄单》
    String、StringBuffer、StringBuilder的区别
    喜欢的音乐
  • 原文地址:https://www.cnblogs.com/happinessqi/p/3512866.html
Copyright © 2011-2022 走看看