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

在一百万个元素的数组中查找唯一的唯一元素

乌学博
2023-03-14
问题内容

在最近的一次采访中有人问我这个问题。

您将获得一个包含一百万个元素的数组。除了一个元素外,所有元素都是重复的。我的任务是找到独特的元素。

var arr = [3, 4, 3, 2, 2, 6, 7, 2, 3........]

我的做法是要经过在整个数组for循环,然后创建一个map索引作为number数组中和valuefrequency数组中出现的次数。然后再次遍历我们的地图,并返回值为1的索引。

我说我的方法会花费O(n)时间。面试官告诉我要以低于O(n)复杂度的方式对其进行优化。我说过,我们不能,因为我们必须遍历具有一百万个元素的整个阵列。

最后,他似乎并不满意,转而关注下一个问题。

我知道遍历数组中的数百万个元素非常昂贵,但是如何在不对整个数组进行线性扫描的情况下找到唯一的元素呢?

PS:数组未排序。


问题答案:

我敢肯定,如果不遍历整个数组就无法解决此问题,至少在没有任何其他信息(例如元素被排序并限制为某些值)的情况下,因此问题的发生时间最短复杂性O(n)。但是,O(1)如果每个元素在数组中的偶数次,则可以将内存复杂度降低到基于XOR的解决方案,如果您感兴趣,这似乎是问题的最常见变体:

int unique(int[] array)
{
    int unpaired = array[0];
    for(int i = 1; i < array.length; i++)
        unpaired = unpaired ^ array[i];
    return unpaired;
}

基本上,每个XORed元素都会与另一个元素抵消,因此您的结果是唯一没有抵消的元素。



 类似资料:
  • 我试图写一个算法,它需要可变数量的通用数组,存储在中,并收集其中所有唯一的元素(元素只发生一次),并将其存储在一个数组中,称为。例如,数组: 将生成包含内容的数组。 以下是我当前的流程算法: 请注意,是一个数组,它包含

  • 例如,对于 我想得到 有没有办法不用for循环或使用? 编辑:实际数据由1000行组成,每行100个元素,每个元素的范围从1到365。最终目标是确定有重复的行的百分比。这是一个作业问题,我已经解决了(用for循环),但我只是想知道是否有更好的方法来做它与Numpy。

  • 这是一个算法问题。如果我错过了Python中任何有帮助的现有函数,请大喊一声。 给定一组元素的,我们可以在Python中使用函数来找到所有唯一的k元素子集。让我们调用包含所有这些子集的集合。请注意,每个这样的子集都有不同的元素。 问题是两步走。首先,给定这些k-不同元素子集,我想组合(其中的一些),这样(组合只是一些子集的超集): > 构图中任意两个子集之间的交集为空 构图中所有子集的并集给出的正

  • 这可能是微软的面试问题。 从排序的数组中找出第k个最小的元素(忽略重复项) [编辑]:数组可能包含重复项(未指定)。 想了很多次,但仍然质疑自己:还有更好的解决方案吗? 取最大堆 时间复杂度:O(NlogK) 空间复杂度:O(K) 这些元素可能是重复的。所以,通过与以前的元素进行比较来检查是否有唯一的元素 还可以使用改进版的快速排序分区算法。但它可能会导致最坏的情况,因为数组已经排序<这里出现了两

  • 问题内容: 我有一个Python,我将根据条件从中逐个删除元素。当集合只剩下1个元素时,我需要返回该元素。如何从集合中访问此元素? 一个简化的例子: 问题答案: 用途: 在您的情况下,它将是: 但是请注意,这将从集合中删除该项目。如果不希望这样做,则可以使用| : 演示:

  • 所以现在我有一个 Arraylist包含以下值 我想找到独特的疫苗类型的数量以及它的频率。因此,例如,这个arraylist应该返回如下内容 理想的情况是它自己独立的数据结构(数组)。我尝试使用哈希列表,但不支持arraylist的格式化方式。 我得到错误“the hashlist Conly be Resolve to Type”。