考虑操作removeAll
,它会从列表中删除所有出现的元素。
该方法返回删除的元素数。
public int removeAll(E element)
实施此操作: 1.基于数组的未排序列表
我们不能使用套装。
我现在开始的事情:
public int removeAll(T element) {
int duplicatesRemoved = 0;
for (int i = 0; i <= array.length - 1; i++) {
for (int j = i + 1; j <= array.length - 1; j++) {
if (array[i] == array[j]) {
}
}
我无法完成其他任务,请帮忙吗?
答案 0 :(得分:0)
将内容转储到collection of some sort since you're not allowed to use Set
,然后取出收藏中的内容。
Arrays(类,而不是原始数组)支持contains方法,但是你每次都会迭代新的集合,使其效率低下。
或者,如果你也不能使用数组,你可以在原始数组中完成,只需要一遍又一遍地寻找重复数据。
答案 1 :(得分:0)
我建议您将重复元素设置为null
之类的内容。删除所有重复项后,通过在末尾交换非null元素来压缩数组,中间使用null元素。
或者,创建一个空数组,并将非重复元素移动到新数组。
答案 2 :(得分:0)
因为这似乎是作业,没有解释,但这个难题:
int lengthWithValues = array.length;
for (int i = 0; i < lengthWithValues; i++) {
// Loop invariant: for all at < i array is sorted, unique and complete.
int valueToBeChecked = array[i];
for (int k = i + 1, int j = i + 1; k < lengthWithValues; j++) {
if (array[j] == valueToBeChecked) {
--lengthWithValues; // Remove duplicate
} else {
array[k] = array[j]; // Maintain differing from all at <= i.
++k;
}
}
}
duplicatesRemoved = array.length - lengthWithValues;
// array[0 .. length - duplicatesRemoved] is the unique array.
int[] uniqueArray = new int[lengthWithValues];
System.arrayCopy(array, 0, uniqueArray, 0, lengthWithValues);
答案 3 :(得分:0)
使用地图。
这是一个算法,它是功能性的,但可以改进:
创建地图&lt; T,Boolean&gt;。第二个参数类型是你想要的,我选择了布尔 创建一个名为newArray的新数组;这将包含唯一值 遍历数组。对于每个项目,执行以下操作:
在遍历列表后,newArray包含所有非重复项,重复计数包含重复项计数。
答案 4 :(得分:0)
1
/**
* This method removes all duplicates from an array named "array"
* using a temporary List. So it converts the array into
* something like a Java set
*
* @return int number of duplicates removed
*/
public static int removeAll() {
int duplicates = 0;
List<Object> list = new ArrayList<>();
for(int i=0;i<array.length;i++){
Object element = array[i];
if(list.contains(element)) {
duplicates++;
}
else {
list.add(element);
}
}
array = list.toArray();
return duplicates;
}
2
/**
* This method removes duplicates from an array named "array" using a
* temporary List.
* @param elementToBeRemoved
* @return int number of duplicates removed
*/
public static int removeAll(Object elementToBeRemoved) {
int duplicates = 0;
List<Object> list = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
Object element = array[i];
if (list.contains(elementToBeRemoved)) {
duplicates++;
} else {
list.add(element);
}
}
array = list.toArray();
return duplicates;
}