Java 有效利用给定整数数组的K-互补对
我对编程很陌生。我需要使用给定的整数数组有效地找到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();
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
(i
步骤1采用
O(NlogN)
,其余步骤采用O(N)
;组合这两个步骤产生O(NlogN)
int j=arr.length-1;对于(int i=0;ii++
是错误的,因为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++) {