在字符和整数中找到第k个非重复元素(大尺寸)

时间:2014-02-17 13:25:45

标签: arrays algorithm

这是我在互联网上发现的一个问题,在接受采访时问道。

  

给定一个非常大的字符和整数数组,我们必须找到第K个非重复元素   例如:如果数组是{1,2,a,s,2,s,b,v}
  如果K = 3
  然后答案应该是'b'。

必需的约束:O(N)时间和O(1)空间。

我做了什么?

我能想出的最佳解决方案是制作大小为256的数组,并在元素到来时对其进行散列。
我认为这是一个有效的解决方案,因为数组256的大小与输入数组大小无关。

我也尝试使用Kth-order statistics方法,但无法形成算法,因为许多数字可以在第k个必需元素之前和之后重复,因此无法确定它的位置。

我需要什么?

  

请分享您的观点以及如何处理   我不想要任何代码。

1 个答案:

答案 0 :(得分:3)

只有当您将字母表视为一个恒定大小时,您的方法才会有效,例如,unicode32会失败。

但请注意,由于这是element distinctness problem的变体 - 我认为在时间和空间限制内无法解决此问题。

<强>证明:
假设你有这样一个使用“真实”O(1)空间和O(n)时间的算法。让这个算法为A
给定元素清晰度问题的实例arr - 使用A(arr,n)。当且仅当数组中的每个元素都是唯一的时,算法应该返回arr[n](基于1)。由于AO(n)时间和O(1)空间,因此我们在O(n)时间和O(1)空间中解决了元素清晰度问题。