这是我在互联网上发现的一个问题,在接受采访时问道。
给定一个非常大的字符和整数数组,我们必须找到第K个非重复元素 例如:如果数组是{1,2,a,s,2,s,b,v}
如果K = 3
然后答案应该是'b'。
必需的约束:O(N)
时间和O(1)
空间。
我做了什么?
我能想出的最佳解决方案是制作大小为256
的数组,并在元素到来时对其进行散列。
我认为这是一个有效的解决方案,因为数组256
的大小与输入数组大小无关。
我也尝试使用Kth-order statistics
方法,但无法形成算法,因为许多数字可以在第k个必需元素之前和之后重复,因此无法确定它的位置。
我需要什么?
请分享您的观点以及如何处理 我不想要任何代码。
答案 0 :(得分:3)
只有当您将字母表视为一个恒定大小时,您的方法才会有效,例如,unicode32会失败。
但请注意,由于这是element distinctness problem的变体 - 我认为在时间和空间限制内无法解决此问题。
<强>证明:强>
假设你有这样一个使用“真实”O(1)
空间和O(n)
时间的算法。让这个算法为A
。
给定元素清晰度问题的实例arr
- 使用A(arr,n)
。当且仅当数组中的每个元素都是唯一的时,算法应该返回arr[n]
(基于1)。由于A
为O(n)
时间和O(1)
空间,因此我们在O(n)
时间和O(1)
空间中解决了元素清晰度问题。