把数组里重复数字去掉
一个面试题,说有一个数组t[100],存放了1-99之间的数字,让你用效率较高的代码,把重复数字去掉.
例如数组{1,2,2,2,3,5,6,6}变成{1,2,3,5,6}.
说有一个数组t[100],存放了1-99之间的数字,让你用效率较高的代码,把重复数字去掉.
例如数组{1,2,2,2,3,5,6,6}变成{1,2,3,5,6}.
我的方法是再开一个数组flag[99]初始化为0,然后对t[100]做一次遍历,每次以t[i]为下标,查询flag[t[i]],if == 0,flag[t[i]] += 1; if > 0,表明t[i]在1-99之间已经出现过了,使之 = -1排除掉。
还有一个想法是对t[100]快排一次,然后遍历。
if (t[i] == t[i+1])
t[i] = -1;
然后i++
不知各位还有什么方法?
问题点数:20、回复次数:9Top
1 楼qhfu(改个名字)回复于 2006-03-16 23:12:43 得分 5
如果需要排序,可以考虑用基数排序Top
2 楼digifish(df)回复于 2006-03-17 00:28:38 得分 5
楼主第一种方法其实就是哈希表法。Top
3 楼skywoody()回复于 2006-03-17 00:30:07 得分 5
sort(t,t+100);
int *newEnd = unique(t,t+100);
t --- newEnd 之间就是你要的数组了Top
4 楼skywoody()回复于 2006-03-17 00:32:15 得分 0
不过其实这道题用hash效率是最高的
如果数字不多的话其实可以考虑用STL的set
去掉重复数字,完成排序,而且比较省空间Top
5 楼Rick_ang(东方未名)回复于 2006-03-17 00:44:16 得分 3
桶排序Top
6 楼ugg(逸学堂(exuetang.net))回复于 2006-03-17 09:34:30 得分 0
使用STL行不?
sort对数组进行排序,unique删除数组内重复数字Top
7 楼ddddh(叶君临)回复于 2006-03-17 09:47:39 得分 0
@ skywoody
用set的话,你每插入一个,set都会用new,或者某个其他的allocator,来分配一个节点,这个分配内存的动作,我个人感觉,会比较慢。:-)Top
8 楼yleiou(单刀匹马)回复于 2006-03-17 09:54:39 得分 2
桶排序感觉很好Top
9 楼greenteanet(扎扎实实打基础,保持一颗平常心。)回复于 2006-03-17 10:01:18 得分 0
使用基数排序Top




