找出數組中只出現一次的數字,其它數字都出現了兩次(java)

題目描述:通過鍵盤錄入數組,一個整型數組裏除了一個數字外,其他的數字都出現兩次,找出這個數字。

                  鍵盤錄入:[1,3,4,4,3,1,5]

                  鍵盤輸出:5

詳細代碼:

public class shuzu {
    public static void main(String[] args) {
    	//fun2();
    	fun1();
    
    }
    
    //方法二:通過TreeMap集合方法求出
    public static void fun2(){
    	  int[] a = tool();
    	
    	  TreeMap<Integer, Integer> hm = new TreeMap<Integer, Integer>();
    	 
  
    	  for(Integer i : a){
    		  if(hm.containsKey(i))
    			   hm.put(i, hm.get(i)+1);
    		  else
    			  hm.put(i, 1);
    	  }
    	
    	  for(Map.Entry<Integer, Integer> ar : hm.entrySet()){
    		  if(ar.getValue()==1)
    			  System.out.println(ar.getKey());
    	  } 	  
    }
    
    //方法一:通過異或的運算,找出一個數字
    public static void fun1(){
    	
  	  int[] a = tool();
  	  int result = a[0];
  	  for(int j=1;j<a.length;j++){
  		  result = a[j]^result;
  	  }
  	  System.out.println(result);
  	  
    }
    
    //把輸入的數據存入到數組中
    public static int[] tool() {
    	
          Scanner sc = new Scanner(System.in);
    	  String str = sc.nextLine();
    	  String line = str.substring(1, str.length()-1);
    	  String[] buf = line.split(",");	   
    	
    	  int[] a = new int[buf.length];
    	  for(int i=0;i<a.length;i++) {
    		  
    		  a[i]=Integer.valueOf(buf[i]);
    	  }
    	  
    	  return a;
     }
}

一. 通過鍵盤輸入字符串([1,3,4,4,3,1,5]),首先要對輸入的數據格式做處理,需用到String類的substring()方法,把輸入的"[ ]"

去除,該方法參數爲截取部分字符串,中有兩個參數start和end,截取後包含頭,不包含尾,所以start=1,end=str.length-1,

然後字符串變爲"1,3,4,4,3,1,5", 再通過String類的split()方法, 按照","分割存到字符串數組中。再通過Integer類中的valueof()

方法即可將String類型數組轉換爲int類型數組。

 

二. 方法一:

    通過位運算異或(^):

    異或運算中,任何一個數字和自己本身異或都是0,任何一個數字和0異或都是本身。

    通過該方法即可運用到該題中 ( 除了有兩個數字只出現了一次,其他數字都出現了兩次);所以從頭到尾異或數組中

    的每一 個數字,那些出現了兩次的數字全部在異或中被抵消掉。

    示例:(1,3,4,4,3,1,5)

    1^3=2  2^4=6  6^4=2  2^3=1  1^1=0  0^5=5

    異或的本質是通過位運算來計算 ,就是先把十進制的數先換爲二進制,然後通過異或規則即可得到出現一次的數字。

 

三. 方法二:

     利用集合Map

     詳細過程:通過遍歷數組存到Map集合中在存入時進行判斷,把數組中的元素存到Map集合中鍵裏,依次判斷存進的數

     若集合中不存在,即存入,把值賦爲一;若集合中存在,即把值加一,依次遍歷完,當值爲一的那個元素,即是數組中

     只出現一次的數。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章