假设我们有一组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]
。
有更好的选择吗?想法?
答案 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]
,使q
为q[p[i]] = i
。迭代i = 0,...,n-1
,设置i = 1,...,n-1
。