用于对数组进行重复数据删除的 Java 程序
Posted
技术标签:
【中文标题】用于对数组进行重复数据删除的 Java 程序【英文标题】:Java program for de-duplicating an array 【发布时间】:2014-06-25 20:07:29 【问题描述】:有人可以帮忙写一个高效的java函数吗?
不使用内部排序或去重功能,取一个包含重复的数组 条目并返回一个没有重复的新数组。例如
deduplicate(array(2,5,10,1, “john" “andy", 5, “peter”, “andy”))
// 返回 2,5,10,1,“john”, “andy”, “peter”
【问题讨论】:
那些不是 Java 数组。 javascript? 您应该向我们展示您迄今为止所做的尝试,然后我们可以帮助您朝着正确的方向前进。 是否必须是相同的相对顺序? 对数组进行排序将其转换为数组列表 && 以删除数组的重复项将其转换为“SET” @NullSoulException 我认为这将被视为“使用内部重复数据删除功能” 【参考方案1】:从基于散列的容器开始,例如HashMap
,对于数组中的每个元素,首先检查它是否存在于容器中,如果不存在则添加它。完成后将容器中的所有元素作为数组返回。
这将是高效的,因为每次检查元素是否在容器中都是 O(1),每次插入都是 O(1)。对数组中的每个元素执行此操作是 O(n),然后在最后再次检索它们也是 O(n),因此最终得到的解决方案是 O(n)。
我把实际的实现留给你作为练习。
【讨论】:
A (Linked)HashSet 会更合适。在添加之前检查它是否存在是没有用的,因为 Set 不会添加已经存在的元素。所以归结为new LinkedHashSet<>(Arrays.asList(array)).toArray()
@JBNizet 我已经很久没有接触过 Java(我是 C# 人)。不知道可用的特定容器类型。在内部,我假设(Linked)HashSet 在添加之前必须检查项目是否存在。
投了反对票,因为当 OP 甚至无法正确命名他应该编程的语言时,尝试回答这个问题是没有用的——他的示例调用肯定不是 java,而是可能是 javascript。请不要试图猜测他的意思,等待OP澄清他的问题。鉴于他明显缺乏基本的编程知识,我也怀疑 OP 是否能够理解像您这样的答案;效率部分可能就在他头上。
@l4mpi 够公平的。我想给出一个通用的解决方案,以便他可以自己尝试并在尝试的同时学习一些东西。以上是关于用于对数组进行重复数据删除的 Java 程序的主要内容,如果未能解决你的问题,请参考以下文章