K-互补对有效地使用给定的整数数组

时间:2017-01-22 08:53:56

标签: java arrays algorithm

我是编程新手。我需要有效地使用给定的整数数组找到K-互补对。我写了下面的代码。它包括重复。我需要消除这种重复。所以请帮我删除重复,请建议是否有更好的方法来做到这一点。

libsphinxclient-dev

}

请有人帮我解决这个问题。感谢

2 个答案:

答案 0 :(得分:2)

这段代码错了,考虑到两个不同的元素构成一对:

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

相反,你应该j=i+1

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

请建议是否有更好的方法来做到这一点。

您的解决方案的TC为O(N^2)。相反,您可以在O(NlogN)中减少它。了解如何:

  1. 对数组进行排序。
  2. 使用两个索引位置,ij设置为0N-1 resp。
  3. 现在,如果a[i]a[j]的总和等于k,请将其打印出来。如果sum < K,则i提前1,否则j减少1
  4. 重复步骤3直到(i < j)
  5. 第1步采用O(NlogN),其余步骤采用O(N);结合两者都会导致O(NLogN)

答案 1 :(得分:0)

如果我理解你的问题,你应该替换

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

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