这是一个由两部分组成的问题,第一个问题要求创建一个方法来检查两个序列是否具有相同顺序的相同值。
其次,我遇到的问题要求创建一个方法来检查两个序列是否按某种顺序具有相同的值,忽略重复项,即 序列 1(1、4、9、16、9、7、4、9、11) 序列 2 (11, 11, 7, 9, 16, 4, 1) 因此序列 1 仍然与序列 2 相同,因为 11、4 和 9 是重复元素
所以我添加了一个方法 public boolean equals(Sequence other) 来检查两个序列是否具有相同顺序的相同值第 1 部分,但我现在需要做的是第 2 部分检查两个序列是否具有相同的值按某种顺序,忽略重复项。
import java.util.Arrays;
public class Sequence {
private int[] values;
public Sequence(int size)
{
values = new int[size];
}
public void set(int i, int n)
{
values[i] = n;
}
public boolean equals(Sequence obj)
{
if (this == obj)
{
return true;
}
if (obj == null)
{
return false;
}
if (getClass() != obj.getClass())
{
return false;
}
Sequence other = (Sequence) obj;
if (!Arrays.equals(values, other.values))
{
return false;
}
return true;
}
public static void main(String args[]){
Sequence s = new Sequence(5);
Sequence s2 = new Sequence(5);// new Sequence(4)
s.set(0, 1);
s2.set(0, 1);
System.out.println(s.equals(s2));//will print true
}
}
我有点困惑,我知道这就是检查重复项的方式,但这就是我所知道的,我真的不知道如何在这种情况下使用它或如何忽略重复项
for (int i = 0; i < values.length; i++)
{
for (int j = i + 1; j < other.length; j++)
{
if (values[i].equals(other[j]) ) {}
}
}
最佳答案
较慢的方法是:遍历较小的数组,对于每个值,检查它是否包含在较大的数组中。然后反过来......所以,如果没有任何进一步的“智能”,你需要进行 n * m 比较。乘2。
更复杂的解决方案:对两个数组进行排序。然后开始依次遍历两个数组(当两个数组都已排序时,您不需要重复迭代第二个数组来确定它是否包含另一个数组中的值)。然后你只需要遍历两个数组一次(但如上所述:以某种交替的方式)。
关于java - 如何检查两个序列是否按某种顺序具有相同的值,(忽略重复项)java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50720185/