Java 有效利用给定整数数组的K-互补对

Java 有效利用给定整数数组的K-互补对,java,arrays,algorithm,Java,Arrays,Algorithm,我对编程很陌生。我需要使用给定的整数数组有效地找到K-互补对。我已经写了下面的代码。它包括复制品。我需要消除这种重复。因此,请帮助我消除这种重复,并请建议是否有更好的有效方法来做到这一点 public class KComplexityOfArray { public static StringBuffer oldFunction(int arr[], int k) { int result = 0; StringBuffer sb = new StringBuffer();

我对编程很陌生。我需要使用给定的整数数组有效地找到K-互补对。我已经写了下面的代码。它包括复制品。我需要消除这种重复。因此,请帮助我消除这种重复,并请建议是否有更好的有效方法来做到这一点

public class KComplexityOfArray {


public static StringBuffer oldFunction(int arr[], int k) {
    int result = 0;
    StringBuffer sb = new StringBuffer();

    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr.length; j++) {
            if (i != j && arr[i] + arr[j] == k) {
                sb.append(arr[i] + "," + arr[j]);
                result++;
            }
        }
    }
    System.out.println(result);
    return sb;
}



public static void main(String[] args) {
    int[] intArray1 = new int[]{4, 5, 6, 3, 1, 8, -7, -6, 7};
    int[] intArray2 = new int[]{1, 2, 7, 5, 6, 3};
    int[] intArray = new int[]{4, 5, 6, 3, 1, 8, -7, -6};
    int k = 9;
    System.out.println("No of k complementary pairs : " + oldFunction(intArray2, k));
}
公共类KComplexityOfArray{
公共静态StringBuffer函数(int arr[],int k){
int结果=0;
StringBuffer sb=新的StringBuffer();
对于(int i=0;i
}


请任何人帮我解决这个问题。谢谢

如果我正确理解您的问题,您应该更换

for (int j = 0; j < arr.length; j++) {
for(int j=0;j

for(int j=i+1;j
考虑到两个不同的元素构成一对,此代码是错误的:

for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr.length; j++) {
请建议是否有更有效的方法

您的解决方案的TC为
O(N^2)
。相反,您可以在
O(NlogN)
中减少TC。请参见:

  • 对数组进行排序
  • 使用两个索引位置,
    i
    j
    分别设置为
    0
    N-1
  • 现在,如果
    a[i]
    a[j]
    之和等于
    k
    ,则打印它。否则,如果
    sum
    ,则将
    i
    提前
    1
    ,否则将
    j
    减少
    1
  • 重复步骤3,直到
    (i

  • 步骤1采用
    O(NlogN)
    ,其余步骤采用
    O(N)
    ;组合这两个步骤产生
    O(NlogN)

    int j=arr.length-1;对于(int i=0;i”,“},”);结果+;}否则如果((arr[i]+arr[j]i++是错误的,因为
    i++
    无论如何都会发生在
    for
    循环的末尾,最终导致
    i
    的双倍增量。使用
    while(i
    loop代替。我尝试了它,结果是内存不足错误。int j=arr.length-1;int I=0;而(Ik时,如何更新
    i
    j
    ?如果不进行更新,将陷入无限循环。在这种情况下,一种方法是同时递增
    i
    和递减
    j
    。只要数组的值是不同的,就可以了,但如果某些值是不同的,则会失败重复
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr.length; j++) {
    
    for (int i = 0; i < arr.length; i++) {
        for (int j = i+1; j < arr.length; j++) {