一个整数数列,元素取值可能是1~N(N是一个较大的正整数)中的任意一个数,相同数值不会重复出现。 设计一个算法,找出数列中符合条件的数对的个数,满足数对中两数的和等于N+1。 复杂度最好是O(n),如果是O(n2)则不得分。
public static void findNumPairs(int a[])
{
BitSet bitSet = new BitSet();
for(int i = 0; i < a.length; i++)
{
bitSet.set(a[i]);
}
int sum = a.length + 1;
int temp = 0;
int j = sum - 2;
for(int i = 0; i < bitSet.size() / 2; i++)
{
temp = a[i] + a[j];
if(temp == sum)
{
System.out.println(a[i] + "--" + a[j]);
j--;
}
else if(temp > sum)
{
j--;
}
}
}
本文介绍了一个用于寻找整数数列中特定数对的算法。该算法利用 BitSet 数据结构存储数列元素,并通过一次遍历找到所有和为 N+1 的数对。目标是在 O(n) 时间复杂度内完成任务。

被折叠的 条评论
为什么被折叠?



