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

从大型未排序数组中删除重复项并保持顺序

严瑞
2023-03-14
问题内容

我有一个未排序的整数数组,其值的范围从Integer.MIN_VALUE到Integer.MAX_VALUE。数组中可以有任意整数的多个重复项。我需要返回一个删除了所有重复项的数组,并且还需要保持元素的顺序。

例:

int[] input = {7,8,7,1,9,0,9,1,2,8}

输出应为{7,8,1,9,0,2}

我知道可以使用解决此问题,LinkedHashSet但我需要一个不占用大量缓冲区空间的解决方案。


问题答案:

您可以使用Java 8 Arrays stream.distinct()方法从数组中获取不同的值,它将仅保留输入顺序

public static void main(String[] args) {
    int[] input = {7,8,7,1,9,0,9,1,2,8};
    int[] output = Arrays.stream(input).distinct().toArray();
    System.out.println(Arrays.toString(output)); //[7, 8, 1, 9, 0, 2]
}


 类似资料:
  • 我有一个问题: 对象显示给定一个排序数组,删除重复的元素,使每个元素只出现一次,并返回新的长度。不要为另一个数组分配额外的空间,必须在内存不变的情况下这样做。例如,给定输入数组Nums=[1,1,2],你的函数应该返回长度=2,Nums的前两个元素分别为1和2。你在新的长度之外留下什么并不重要。 我使用HashSet来回答这个问题,但结果总是显示[1,1]。我想不出来有人能帮我知道问题出在哪里吗?

  • 我试图通过合并排序对数组进行排序,并在排序时删除我认为相等的元素。我递归调用合并排序,然后合并。 到了这一点,我发现a和c是重复的。 我根据特定的标准决定我想要哪一个,我选择c。我递增右手计数器和左手计数器,比较b和d。假设我选择d,然后我选择b。我希望我的最终列表只有元素 但是,发生的事情是在下一个递归调用中,和是0和3,因此d在下一次调用时在数组中列出两次。合并过程使用的数组是: 这是代码。提

  • 结果:[1,2,3,3,3,4,4][1,2,3,3,3,4,4]

  • 问题内容: 我使用下面的代码行遍历数据库中的一个表: 如果我打印出数组: 我会得到这个: 但是我想摆脱数组中的重复项,所以我使用 我得到下面的奇怪结果,这不是我想要的结果: 理想情况下,我认为它应该返回以下内容: 我该怎么做才能正确处理?我使用了错误的PHP语法/默认功能吗? 问题答案: 该功能将为您完成此操作。您只需要添加标志:

  • 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 示例 1: 给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1,2。 你不需要考虑数组中超出新长度后面的元素。 示例 2: 给定 nu

  • 我有一个有重复项的有序列表(比较相等的对象),我想删除重复项。因为我想维持秩序,所以无法使用。 我的列表中的重复项不会一个接一个地出现,我希望保留最后出现的项。在这篇相关的文章中,似乎只保留了第一次出现的重复。 作为我简化的例子,这是我想要的: 我唯一能想到的是一个混乱的实现,使用多次迭代首先保存每个副本的最后一次出现,然后使用最后出现的副本的顺序重新创建原始列表。