递归地从整数的ArrayList中删除相邻的重复项,而不同时删除两者



我正在编写一个方法来删除Integer的ArrayList中相邻的重复值。

public static void remove2InARow(ArrayList<Integer> list) {
for (int i = 0; i < list.size() - 1; i++) {
if (list.get(i) == list.get(i+1)) {
list.remove(i);
}
}
}

如果将[3,4,3,3]作为参数传入,则输出将为[3,4,3]

当相同的值重复超过2次时,这种实现就成了问题。例如,当[1, 2, 5, 4, 6, 6, 6, 1, 2]应该是[1, 2, 5, 4, 6, 1, 2]时,它变成了[1, 2, 5, 4, 6, 6, 1, 2]。类似地,[n, ..., n]应该变成[n]

有没有一种方法可以将我的实现调整为递归的?它甚至需要是递归的吗?

它当然不需要递归!

问题的根源是,在迭代时从集合中删除元素可能会导致一些意外行为,在迭代过程中尽量不要触摸列表,然后一旦完成,就删除需要的元素。

import java.util.stream.Collectors;
public static void remove2InARow(ArrayList<Integer> list) {;
list= list.stream().distinct().collect(Collectors.toList());
System.out.println(list);
}

也许它会帮助你!

public static void remove2InARow(ArrayList<Integer> list) {
for (int i = 0; i < list.size() - 1; i++) {
if (list.get(i) == list.get(i+1)) {
list.remove(i);
i--;
}
}
}

这对我有效。

最新更新