当前位置: 首页 > 面试题库 >

递归-删除重复项

璩俊雅
2023-03-14
问题内容

我正在研究一种方法,以递归方式删除ArrayList中元素的重复项。但是我遇到了一个问题,我的方法有效并删除了一些元素,但不是所有重复项。

这是我的输入:

100, 200, 200, 300, 400, 300, 100, 500, 500, 400, 100, 400, 100, 100

这是输出:

100, 200, 300, 400, 100, 500, 100

而我的方法:

public static void removeDuplicates(ArrayList<Integer> list, int counter){
    if(list == null){
        throw new NullPointerException();
    }

    if(counter < list.size()){
        if(list.contains(list.get(counter))){
            list.remove(list.lastIndexOf(list.get(counter)));
        }
        removeDuplicates(list, ++counter);
    }
}

我知道我只是删除了所述值的最后一个元素,然后迭代到下一个元素。我想知道如何更改此设置以删除所有重复的元素。另外,我的输出的一部分使我感到困惑,其中有三个值“
400”,但输出中只显示一个。

谢谢您的帮助。


问题答案:

试试这个:

    public static void removeDuplicates(ArrayList<Integer> list, int counter){


        if(list == null){
            throw new NullPointerException();
        }

        if(counter < list.size()){
            if(list.contains(list.get(counter))){
                if(list.lastIndexOf(list.get(counter))!=counter)
                {
                    list.remove(list.lastIndexOf(list.get(counter)));
                    counter--;
                }
            }
            removeDuplicates(list, ++counter);
        }

    }


 类似资料:
  • 我需要返回带有删除的所有重复元素的链表的头部。我理解这个问题的逻辑,但我在使用递归时变得困惑。 如果我在If条件之前调用函数RemoveDuplicates(head.next);很好用。但是,如果我交换语句的顺序(rest所有内容都完全相同),如下所示: 代码无法正确解决像'1->1->1->1'这样的测试用例。在后一种情况下,我得到的输出是'1->1'。 我真的想要一些关于我如何更好地理解递归

  • 我有一个如下所示的对象;

  • 我有以下程序 我是这样理解的。如果数字是333。给我。自从33 我不明白为什么它打印3作为答案。 我是java新手,所以仍在努力理解基础知识。 我不相信这个问题是重复的。作为java的初学者,我的问题要简单得多。我相信问题是使用javascript而不是java。

  • 请注意,在转向您之前,我已经浏览了各种帖子。事实上,我尝试实现中提供的解决方案:基于“notin”条件从数据帧中删除行 我的问题如下。让我们假设我有一个巨大的数据帧,我想删除重复的数据帧。我很清楚我可以使用drop_duplicates,因为这是最快的最简单的方法。然而,我们的老师希望我们创建一个包含重复项ID的列表,然后根据这些值是否包含在上述列表中删除它们。 现在,让我们看看输出: 因此,我得

  • 问题内容: 有没有办法用Java递归删除整个目录? 在正常情况下,可以删除一个空目录。但是,要删除带有目录的整个目录,就不再那么简单了。 如何用Java删除包含目录的整个目录? 问题答案: 你应该查看。它有一个类,可以执行你想要的操作。

  • 问题内容: 如何从以以下方式设置的表中删除重复项? 一个工作人员可以有多个与他们相关联的type_ID,我想删除所有重复的类型。如果有重复项,我想删除具有最新条目的类型。 问题答案: 窗口函数row_number()的教科书候选: 这也照顾了一组相同的受骗者的情况。 请参阅有关data.SE的简化演示。 更新较简单的版本 事实证明,这可以简化:在SQL Server中,您可以直接从CTE中删除: