从堆栈中删除重复元素

时间:2013-09-20 10:50:20

标签: stack duplicate-removal

假设我有一个堆栈,其元素是[1,2,3,3,2,1,4,5,4,5]堆栈的顶部指针指向元素1.现在我想删除所有重复元素,所以我的最终堆栈将是[1,2,3,4,5]。我怎么能做这件事,这个操作有没有算法。此操作需要的最小堆栈数是多少。

2 个答案:

答案 0 :(得分:0)

好吧,你没有指定任何语言,所以我会试着给一些伪语言做一些操作:

Stack FunctionName(Stack paramStack)
{
   Stack aux1 = param;
   Stack aux2;
   while (aux1.size() > 0)
   {
      StackElement eleAux = aux1.pop();
      if (NotExist(aux2,eleAux))
      {
         aux2.push(eleAux);
      }
    }
    while (aux2.size() > 0)
    {
       StackElement eleAux = aux2.pop();
       aux1.push(eleAux);
    }
  }

Supose Stack表示堆栈的数据结构(抱歉冗余),StackElement表示堆栈的元素。 “NotExist”函数仅验证某些元素是否存在于某个堆栈上。

希望有所帮助。 ^^

答案 1 :(得分:0)

@ColdHack的答案在第一个堆栈的每个元素上移动第二个堆栈,这在大堆栈大小上可能是昂贵的。我想到的第一件事就是使用哈希映射并从堆栈中弹出每个值,将其查找到地图 - 如果它已经没有任何内容,如果没有,请将哈希映射中的键设置为哈希映射中的堆栈和值到堆栈中的索引,然后在完成时按值对哈希映射进行排序,然后将其放入堆栈中。如果想法不明确,我可以尝试发布一些通用代码。