我应该在Java中实现一个方法,该方法返回没有重复的整数数组。我已经做到了,但是我的解决方案似乎很长。我想知道改善它的方法。
我添加了注释,以便您的人更容易理解代码的作用。
public class IntArrayProcessor {
private int[] a;
public IntArrayProcessor(int[] a) {
this.a = a;
}
/**
*
* @return Array with no repeated integers.
*/
public int[] getSet() {
/* creates an array with the same entries and length as this.a */
int[] duplicateA = new int[this.a.length];
/* stores the number of repeated entries in array this.a */
int numberOfDuplicates = 0;
/* is the integer a duplicate or not? */
boolean isDuplicate;
/**
* Counts the number of duplicates in array this.a
*/
for (int i = 0; i < this.a.length; i++) {
duplicateA[i] = this.a[i];
}
for (int i = 0; i < duplicateA.length; i++) {
isDuplicate = false;
for (int j = i + 1; j < this.a.length; j++) {
if (duplicateA[i] == this.a[j]) {
isDuplicate = true;
}
}
if (isDuplicate) {
numberOfDuplicates++;
}
}
/*
* the noDuplicate array has the lenght of the this.a array minus the
* number of repeated entries
*/
int[] noDuplicate = new int[this.a.length - numberOfDuplicates];
/* to keep track of the noDuplicate indexes */
numberOfDuplicates = 0;
/**
* An array with no repeated numbers
*/
for (int i = 0; i < duplicateA.length; i++) {
isDuplicate = false;
for (int j = i + 1; j < this.a.length; j++) {
if (duplicateA[i] == this.a[j]) {
isDuplicate = true;
}
}
if (!(isDuplicate)) {
noDuplicate[numberOfDuplicates] = duplicateA[i];
numberOfDuplicates++;
}
}
return noDuplicate;
}
}
答案 0 :(得分:1)
一个简单的解决方案是使用Stream API:
int[] distinctArray = IntStream.of(a).distinct().toArray();
如果您不想使用Stream API,则可以使用HashSet(或其他实现Set接口的集合)。
Set<Integer> set = new HashSet<Integer>(Arrays.asList(array));
答案 1 :(得分:0)
那是一些相当长的代码!似乎您正在寻找比Max提出的更自制的解决方案!以下是一些我可以做的伪代码:
1.创建一个包含int
并返回boolean
的字典。
2.对于起始数组中的每个元素,将其boolean
的值true
添加到字典中(即使值实际上无关紧要)。
3.在字典中找到键的数量(这将是在第一个数组中找到的唯一值的数量,这也是新数组的长度)
4.给定在上一步中找到的长度,创建一个新数组。
5.浏览字典中的每个键,并将其添加到新数组中!
快捷方式:通常,从步骤4和5而不是从字典中获取键将返回一个数组,这将是您的最终解决方案。
如果有帮助的话,我很乐意写一个更正式的解决方案。
注意:如果您只熟悉Java,则Dictionary与HashMaps几乎是 同义词,在这种情况下可以互换使用 。 Java的字典的默认实现被称为HashMap
注意2:在Dictionary / HashMap中访问键数/获取所有键应该是内置函数,而不是您必须编写的函数!