2017-01-22 33 views
1

我想實現有效的K互補陣列匹配對與O(NlogN)匹配的整數陣列。下面是我的代碼,它不工作。有誰能幫我解決這個問題嗎?我曾經嘗試過,但無法通過自己理清將K互補陣列對的效率提高到O(NlogN)

public static StringBuffer newFunction(int arr[], int k) { 
    Arrays.sort(arr); 
    int result = 0; 
    StringBuffer sb = new StringBuffer(); 
    int j = arr.length - 1; 
    int i = 0; 
    while (i <= j) { 
     if (arr[i] + arr[j] == k) { 
      sb.append("{" + arr[i] + "," + arr[j] + "}" + ", "); 
      result++; 
     } else if ((arr[i] + arr[j]) < k) { 
      i++; 
     } else { 
      j--; 
     } 
    } 

    System.out.println(result); 
    return sb; 
} 
+0

你想怎麼處理相同的對?應該'newFunction(new int [] {1,1,2,2,2},3)'print'1'還是'6'? – Anton

回答

1

你缺少索引的增量&遞減,當你發現了一雙。修改下面的相關代碼:

while (i <= j) { 
    if (arr[i] + arr[j] == k) { 
     sb.append("{" + arr[i] + "," + arr[j] + "}" + ", "); 
     result++; 
     i++; // increment 
     j--; // decrement 
    } else if ((arr[i] + arr[j]) < k) { 
     i++; 
    } else { 
     j--; 
    } 
} 

通過這種修改,它應該工作:

int myArray[] = {8,5,7,10,2,13,11,4,9,6,1,3}; 
System.out.println(newFunction(myArray, 15)); 
// 5 
// {2,13}, {4,11}, {5,10}, {6,9}, {7,8}, 
+0

謝謝......我明白了。 – Dilee

+0

請注意,此代碼爲數組「{1,1,2,2}」和「k = 3」輸出'2',這可能不是所需的答案。 – Anton

+0

Sandipan我需要確定我的複雜性計算是否正確與上面的代碼上面一樣。我想這將是O(NlogN)是否正確...? – Dilee