如何抑制数组中的重复项但保持顺序?

时间:2014-11-07 00:43:03

标签: arrays algorithm

假设我们有一组n个数字:a = [4,8,2,7,7],所以我需要"相同的数组",但没有重复的项目,所以有一个想法,取a[n-1]并与a[n-2]进行比较,如果 a[n-2] = a[n-1],则a[n-2] + = 1,重复此过程n-1次,直到获得没有重复项的数组,但一般如果a[n]> a[n+1]结果数组必须保持此顺序,如果a[n]< a[n+1]。 但是这有一个问题,如果数组是a = [6,6,2,8,7],那么最后的比较会产生a = [7,6,2,8,7]而现在是a[0] = a[n-1]

有更好的选择吗?想法?

1 个答案:

答案 0 :(得分:1)

这是一个简单的O(n log n)时间算法。准备一份清单p = [0,...,n-1]并通过索引到a来稳定排序以确定比较结果,例如a = [4,8,2,7,7],排序清单为p = [2,0,3,4,1],以及{ {1}},已排序的列表为a = [6,6,2,8,7]。计算逆置换,即定义另一个阵列p = [2,0,1,4,3],使qq[p[i]] = i。迭代i = 0,...,n-1,设置i = 1,...,n-1