Aar*_*ron 6 c++ theory arrays sorting duplicates
我在接受采访时得到了这个问题,最后被告知有一种更有效的方法可以做到这一点,但仍然无法弄明白.您正在向函数传递一个整数数组和一个数组大小的整数.在数组中你有很多数字,有些例如重复1,7,4,8,2,6,8,3,7,9,10.你想获取该数组并返回一个数组,其中所有重复的数字都放在数组的末尾,以便上面的数组变成1,7,4,8,2,6,3,9,10,8,7.我使用的数字并不重要,我不能使用缓冲区数组.我打算使用BST,但必须保持数字的顺序(重复的数字除外).我无法弄清楚如何使用哈希表,所以我最终使用了一个双循环(n ^ 2可怕,我知道).如何使用c ++更有效地完成此操作.不寻找代码,只是想知道如何做得更好.
如下:
arr 是输入数组;seen 是已遇到的数字哈希集;l 是放置下一个唯一元素的索引;r 是要考虑的下一个元素的索引.由于您不是在寻找代码,因此这里有一个伪代码解决方案(恰好是有效的Python):
arr = [1,7,4,8,2,6,8,3,7,9,10]
seen = set()
l = 0
r = 0
while True:
# advance `r` to the next not-yet-seen number
while r < len(arr) and arr[r] in seen:
r += 1
if r == len(arr): break
# add the number to the set
seen.add(arr[r])
# swap arr[l] with arr[r]
arr[l], arr[r] = arr[r], arr[l]
# advance `l`
l += 1
print arr
Run Code Online (Sandbox Code Playgroud)
在您的测试用例中,这会产生
[1, 7, 4, 8, 2, 6, 3, 9, 10, 8, 7]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1821 次 |
| 最近记录: |