gpt4 book ai didi

java - 从 ArrayList 中删除子列表

转载 作者:搜寻专家 更新时间:2023-11-01 02:21:38 25 4
gpt4 key购买 nike

为简单起见,假设我有一个 ArrayList,其索引只包含一个单位数整数。例如:

6 4 5 6 0 6 3 4 1 6 1 6 0 6 8 3

我想过滤掉所有出现的子列表 6 0 6,这样新列表就变成了:

6 4 5 3 4 1 6 1 8 3

有什么办法吗?使用 ListIterator 似乎对我不起作用,因为我必须共同考虑三个连续的元素,老实说我不确定该怎么做。

这是我实现的方法的框架:

public static void filterList(ArrayList<Integer> list) {
ListIterator<Integer> iterator = list.listIterator();
int elem;
while (iterator.hasNext()) {
// Remove any sublist of 6 0 6
}
}

编辑:同样,为了简单起见,我们假设不会有 60606 或类似的情况。

最佳答案

您可以使用 Collections.indexOfSubList 创建高效简洁的 O(nm) 解决方案:

public static void removeAllSubList(List<?> list, List<?> subList) {
// find first occurrence of the subList in the list, O(nm)
int i = Collections.indexOfSubList(list, subList);
// if found
if (i != -1) {
// bulk remove, O(m)
list.subList(i, i + subList.size()).clear();
// recurse with the rest of the list
removeAllSubList(list.subList(i, list.size()), subList);
}
}

Ideone Demo

关于java - 从 ArrayList 中删除子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39694642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com