gpt4 book ai didi

java - 如何在数组列表中删除这种情况,而不是仅仅检查它是否发生

转载 作者:行者123 更新时间:2023-12-01 22:38:41 27 4
gpt4 key购买 nike

下面的代码如果传递 set1 = {1, 2, 4, 5, 4, 5} 和 set2 = {4,5,4} 因为 4,5,4 在 set1 中连续出现,我希望它而不是下面的方法返回 true 或 false,它会从 set1 中删除连续出现的 {4, 5, 4},因此 set1 = {1,2,5}。

public static boolean contains(ArrayList<Integer> set1, ArrayList<Integer> set2) {
OUTER:
for (int i = 0; i < set1.size() - set2.size(); i++) {
for (int j = 0; j < set2.size(); j++) {
if (!set1.get(i + j).equals(set2.get(j)))
continue OUTER;
return true;
}
return false;
}

最佳答案

首先,我将您的 contains 重命名为 indexOf 并将其修改为使用 List 接口(interface)并返回 int > 代表匹配索引

public static int indexOf(List<Integer> set1, List<Integer> set2) {
OUTER: for (int i = 0; i < set1.size() - set2.size(); i++) {
for (int j = 0; j < set2.size(); j++) {
if (!set1.get(i + j).equals(set2.get(j)))
continue OUTER;
return i;
}
}
return -1;
}

然后调用remove()的方法对于所有匹配元素,例如,

public static void removeLinearMatch(List<Integer> al, List<Integer> bl) {
int size = (bl != null) ? bl.size() : 0;
int index = indexOf(al, bl);
while (index > 0 && size > 0) {
al.remove(index);
size--;
}
}

终于可以测试了,

public static void main(String[] args) {
List<Integer> al = new ArrayList<>(Arrays.asList(1, 2, 4, 5, 4, 5));
List<Integer> bl = new ArrayList<>(Arrays.asList(4, 5, 4));
removeLinearMatch(al, bl);
System.out.println(al);
}

我得到了请求的输出

[1, 2, 5]

关于java - 如何在数组列表中删除这种情况,而不是仅仅检查它是否发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26519639/

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