ListMap:删除具有最小值的m个最小元素

时间:2013-04-18 09:58:09

标签: algorithm data-structures map

我必须做一个输入整数m的函数,并删除具有最小值的地图的m元素。 我的主要问题是使用O(nlogn)复杂度来做到这一点。 (n是地图的大小)

这是我的解决方案:

if (Map.isEmpty())
    return;
if (Map.size()<m){ //remove all keys
      Iterator<K> it=Map.keys().iterator(); //collection of all keys 
      while (it.hasNext())
          Map.remove(it.next());
}
else{
for (int i=0; i<m; i++){
   key=Map.findKeyMin() //complexity:O(n)
   Map.remove(K);
}

2 个答案:

答案 0 :(得分:0)

您的解决方案的复杂度为O(n * m),这是次优的。在c++中,<algorithm>标题中有一个名为nth_element的函数,此函数是线性函数,它将集合中最小的n元素与其他元素分开。该功能是通过修改qsort算法实现的,我相信这就是你需要的。

答案 1 :(得分:0)

你可以在O(n)时间内完成。看看http://en.wikipedia.org/wiki/Selection_algorithm。基本上,您可以找到第m个元素并删除小于或等于第m个元素的所有内容。