gpt4 book ai didi

java - 删除数组中两个或多个以6结尾的连续数字

转载 作者:行者123 更新时间:2023-12-01 19:51:43 24 4
gpt4 key购买 nike

我已经尝试过,但它仅适用于两个连续的数字,而不适用于两个以上的数字。请找到下面我尝试过的代码,并提出解决方案。

示例输入:

3636621216626第376章第661章6

示例输出:

362121第661章6

我的代码:

public static List<Integer> processArray(ArrayList<Integer> array) {
int num=0;
int prevnum=0;
for(int i =0;i<array.size();i++) {
num=array.get(i);
if(i>0 && array.get(i-1)%10==6 && num%10==6) {
array.remove(i-1);
array.remove(i-1);
}
}
return array;
}

最佳答案

正如评论中提到的。第一个解决方案恰好适用于您当前的用例。如需更灵活的解决方案,您可以使用以下代码片段:

public static List<Integer> processList(List<Integer> list){
int encountered = 0;
for(ListIterator<Integer> it = list.listIterator(); it.hasNext(); ){
int i = it.next();
if(i % 10 == 6){
encountered++;
} else {
encountered = 0;
}
if(encountered > 1){
it.remove();
if(encountered == 2){
it.previous();
it.remove();
}
}
}
return list;
}

它使用一个listIterator和一个计数器变量。这样我们就可以遍历列表,统计有多少个 6,如果连续超过 2 个则将其删除。

当不使用迭代器时,一旦开始删除一些元素,您就会开始跳过元素。因为当删除索引处的元素时,列表会缩短。因此上面的元素 1 索引将滑入缺失的位置。当您在下一步中增加索引时,您将跳过一个元素。

<小时/>

我建议使用迭代器和 2 个 for 循环来实现这一点:

public static List<Integer> processList(List<Integer> list){
for(Iterator<Integer> it = list.iterator(); it.hasNext(); ){
for(int i = it.next(); i % 10 == 6 && it.hasNext(); i = it.next()){
it.remove();
}
}
return list;
}

第一个 for 循环像往常一样迭代列表,如果最后一个数字是 6,第二个 for 循环将删除数字。

关于java - 删除数组中两个或多个以6结尾的连续数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51149294/

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