1. 程式人生 > >查詢陣列中重複的數字

查詢陣列中重複的數字

1.一個數組長度是n+1 範圍是1~n-1 查詢至少一個數組中重複的數字

public static void main(String[] args) {
		//長度必須是N+1, 範圍是1~N-1
		
		int[] a = new int[]{1,2,3,4,5,6,7,8,3,9};
		System.out.println(find1(a) + "");
		System.out.println(find2(a) + "");
	}
	
	static int find1(int[] a){
		int[] is = new int[a.length];
		for(int i = 0 ; i < a.length ; i++){
			is[a[i]] = ++is[a[i]];
			if(is[a[i]] > 1){
				return a[i];
			}
		}
		return -1;
	}
	
	static int find2(int[] a){
		int x = 0; 
		int y = 0;
		do{
			x = a[a[x]];
			y = a[y];
		}while(x != y);
		x = 0; //x y 獲取到折中的位置
		do{
			x = a[x];
			y = a[y];
		}while(x != y);
		return x;
	}
第一種方式使用點陣圖當N較大的時候會比較費記憶體。

第二種方式使用單鏈表存在環來判斷時間複雜度雖然沒第一種快,但是節省記憶體而且時間複雜度只為N,在特定條件下是一種比較實用的演算法。