algorithms in c 里的一道题目~~~~~~~~~
删除一个线性表里所有相同的元素,算法要求nlogn时间内解决
证明:如果只用比较,则任何算法都需要不小于nlogn的比较次数
证明:如果允许比较之外的操作,且元素均为实数,则不用元素间比较就可以解决
算法我只能想到先用用归并或快排对表排序,然后顺序扫描删除,时间复杂度nlogn + n, 有不用排序的办法么?
证明表示没思路
[解决办法]
我觉得可以使用计数法,并且申请一个O(n)的空间,
扫描一遍,记录下要删除的元素位置。
再求得总共需要删除的元素的个数,
最后一次移动线性表,可以达到O(n)的时间复杂度的。
[解决办法]
楼上的做法只能在元素值在一个合理范围内,否则hash浪费太多空间了,否则还是排序好一点
[解决办法]
先快排,然后删除相邻的相同元素。
难道 不是NlgN吗?
[解决办法]
另外,时间复杂度一般不说NlgN + N,因为它和NlgN是一样一样的。