2017-01-22 3 views
1

O(NlogN)と一致する整数の配列のK相補対の実装にしたいと思います。以下は私のコードであり、動作していません。誰でも私がこれを解決するのを助けることができます。私はそれを試してみましたが、あなたはペアを見つけるときに、インデックスの増分&減少が欠落している配列の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)' '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,2}'と 'k = 3'の' 2'を出力します。これはおそらく望ましい答えではないでしょう。 – Anton

+0

Sandipan上記のコードの上に私の複雑さの計算が正しいかどうかを確認する必要があります。私はそれがO(NlogN)正しいだろうと思います...? – Dilee

関連する問題