2017-04-06 49 views
0

該方法應返回兩個數組中找到的最小類似值。它的工作原理與此輸入:Java算法錯誤

int[] C={1,3,2,1}; 
int[] D={4,2,5,3,2}; 

public static int getSmallestSimilar(int[] C, int[] D) { 
     int n = A.length; 
     int m = B.length; 
     Arrays.sort(A); 
     Arrays.sort(B); 
     int i = 0; 
     for (int k = 0; k < n; k++) { 
      System.out.println(B[i] +"::"+ A[k]); 
      System.out.println(i +"::"+ k); 
      if (i < m - 1 && B[i] < A[k]) 
       i += 1; 
      if (A[k] == B[i]) 
       return A[k]; 
     } 
     return -1; 
    } 

不幸的是,它不與該輸入工作:

int[] A={15,9} and int[] B={6,9,3}; 

我試圖解決問題,但我不能,請幫忙

+0

它不依賴於數組的大小可能與差異的大小,?我怎麼能解決? –

+0

另一個問題,在同一行中 - 您提前B的索引,但只有一次。你可能會(如在這種情況下)前進到另一個也小於A值的B值。所以......考慮你是否想要一個最多執行一次的'if'語句或另一種可以執行多次的語句。 –

+0

@SalahBenAtwa - 它取決於數組大小。線部分:「如果我 Dakoda

回答

0

B爲2個指數。如果只增加一次。 你的循環改爲

  for (int k = 0; k < n; k++) { 
       // A[k] = 9, catch up B[i] until b is greater than or equal. 
       while (i < m - 1 && B[i] < A[k]) 
        i += 1; 
       if (A[k] == B[i]) 
        return A[k]; 
     } 
+0

等一下,我想你只想去通過一次,我會改變它 – Dakoda

+0

@SalahBenAtwa,這是否正確你的問題?如果是這樣,你可以請它標記爲已解決? – Dakoda

0

k應增加只有B[i]>A[k]

這個循環應該工作:

int i = 0,k = 0; 
    for (;;) { 
     if(i >= m || k >= n) 
      return -1; //or anything which implies no match found 
     System.out.println(B[i] + "::" + A[k]); 
     System.out.println(i + "::" + k); 
     if (B[i] < A[k]) 
      i += 1; 
     if (B[i] > A[k]) 
      k += 1; 
     if (A[k] == B[i]) 
      return A[k]; 
    }