我正在尝试创建一个方法,使两个数组交叉重复.
例: {1,2,5,4,1,3} and {1,2,1} -> {1,1,2}.
我有一个交叉但不重复的方法.
public int[] findSameElements(int[] p1, int[] p2) {
int count = 0;
for (int i = 0; i < p1.length; i++) {
for (int j = 0; j < p2.length; j++) {
if (p1[i] == p2[j]) {
count++;
break;
}
}
}
int[] result = new int[count];
count = 0;
for (int i = 0; i < p1.length; i++) {
for (int j = 0; j < p2.length; j++) {
if (p1[i] == p2[j]) {
result[count++] = p1[i];
break;
}
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
如何在不使用Arrays.*或添加重复的情况下添加List.*?
请尝试以下功能:
public int[] findSameElements(int[] p1, int[] p2)
{
int count = 0;
bool[] choosen = new bool[p2.length];
for (int i = 0; i < p1.length; i++)
{
for (int j = 0; j < p2.length; j++)
{
if (!choosen[j] && p1[i] == p2[j])
{
choosen[j] = true;
count++;
break;
}
}
}
int[] result = new int[count];
count = 0;
for (int i = 0; i < p2.length; i++)
{
if (choosen[i])
{
result[count] = p2[i];
count++;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
如有必要,您还应该应用排序,此解决方案具有O(N ^ 2)复杂度.也可能使O(NLogN)复杂化.