hdu 3763 CD(二分查詢) Java實現
阿新 • • 發佈:2018-12-12
題意:求集合A和B中有幾個相同的元素,其中集合中元素已經按升序排好,集合的元素個數n<=1000000
分析:集合中的元素已經按升序排好,只要對B中每個元素在A中進行二分查詢就解決了。
程式碼:
public static void main(String[] args) { int n,m; //從鍵盤錄入A,B兩個集合中的元素個數 Scanner input = new Scanner(System.in); System.out.println("請輸入A中元素個數:"); boolean flag; do{ //依題意,元素個數應小於1000000 n=input.nextInt(); if(n>1000000){ System.out.println("元素個數應小於1000000,請重新輸入:"); flag=true; } else{ flag = false; } } while(flag); System.out.println("請輸入B中元素個數:"); do{ m=input.nextInt(); if(m>1000000){ System.out.println("元素個數應小於1000000,請重新輸入:"); flag=true; } else{ flag = false; } } while(flag); int[] a = new int[n]; //A集合 int[] b = new int[m]; //B集合 ArrayList<Integer> x = new ArrayList<Integer>(); //定義一個ArrayList來存放A,B中相同的元素 System.out.println("A中元素值:"); for(int i = 0;i<n;i++){ //給A中每個元素賦值 a[i] = input.nextInt(); } System.out.println("B中元素值:"); for(int i=0;i<m;i++){ b[i] = input.nextInt(); int result = binarySearch(a, b[i]); //對B中每個元素在A中進行二分查詢 if(result != -1) { //結果不為-1,說明A中有此元素,將此元素加入x中 x.add(b[i]); } } System.out.print("A,B中相同的元素有:"); for(Integer res : x){ //將結果打印出來 System.out.print(res+" "); } }
讓我們執行測試一下吧