在网上看到一个面试题,是怎么在10万个手机号码中把重复的号码筛选出来。
想了一下,可以先使用快速排序法进行排序,然后再逐条循环和相邻号码匹配,这样重复的号码就出来了。
如果分段进行的话可以适当减小算法的复杂度。而且可以通过多线程充分利用CPU性能。
使用mapreduce简直不要太容易了。
var result = 号码.MapReduce(t=>
{
return new KeyValueClass(t.号码, 1);
},
(key, values)=>
{
return values.Count();
});
然后循环字典result,把value>1的数据取出来就可以了