我是编程新手。我需要有效地使用给定的整数数组找到K-互补对。我写了下面的代码。它包括重复。我需要消除这种重复。所以请帮我删除重复,请建议是否有更好的方法来做到这一点。
libsphinxclient-dev
}
请有人帮我解决这个问题。感谢
答案 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)
中减少它。了解如何:
i
和j
设置为0
和N-1
resp。a[i]
和a[j]
的总和等于k
,请将其打印出来。如果sum < K
,则i
提前1
,否则j
减少1
。 (i < j)
第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++) {