编写函数RemoveDuplication()的最有效实现
Write the most efficient implementation of the function RemoveDuplication()
所以我正在学习,我有这个问题,编写函数RemoveDuplication()的最有效实现,它删除了列表中的任何重复。假设列表已排序,但可能存在重复。因此,如果列表最初为 <2,2,5,6,6,6,9>,则函数应该使其为<2,5,6,9>。
我想要删除重复的代码就在这里,我想知道,是否有更有效的方法来删除列表中的重复
template <class T>
void DLList<T>:: RemoveDuplication()
{
for(DLLNode<T>*ptr = head; ptr!=NULL; ptr=ptr->next)
while (ptr->val == ptr->next->val)
{
ptr->next->next->prev = ptr;
ptr->next = ptr->next->next;
}
}
看起来你的代码将运行在0 (n),这是一个很好的算法。这可能不会更有效率,因为你必须访问每一项才能删除它。
如果你不想删除重复的对象,但是想要返回一个包含非重复对象的新列表,你可以通过将其设置为O(m)使其稍微快一些,其中m是唯一数字的数量,小于或等于n。但我想不出任何方法来做到这一点。
重述一下,有可能稍微快一点,但这很难,而且改进可以忽略不计。
p。当你把它从你的列表中拿出来的时候,不要忘记删除它;)
我认为0 (n)是可以的。然而,最重要的是你的程序会崩溃:-)
for(DLLNode<T>*ptr = head; ptr!=NULL; ptr=ptr->next)
while (ptr->val == ptr->next->val)
代码区分ptr->next
而不检查它是否为!= NULL
。因此,算法应该在到达列表的最后一个元素时崩溃。
现在给你一个优化问题:如何在每次迭代时不测试ptr和ptr->next而使程序正确?
相关文章:
- 如何有效地实现将向量的数据分配给多个变量?
- 使用通常称为 API 实现C++多个客户和生产者解决方案,这是否有效?
- 在 h 和 cpp 文件中单独声明和实现模板有时有效,有时会出现链接器错误
- 为什么优先级队列是使用堆实现的,而我们可以更有效地使用向量来实现它
- std::shared_ptr<std::string const> 可以作为引用计数的不可变字符串的有效实现吗?
- 在C 中实现基于模板的可选类成员的最有效方法
- 在 stl 中使用向量和对的最有效实现 Dijkstra 最短路径C++
- 哪些有效的C++项目可以通过C++11更好地实现?如何
- 双向映射是否有更有效的实现
- 在班级基础中实现功能的最有效方法
- 确定在 C++11 中实现 bignums 的最有效字大小
- 在不使用专用语法的情况下,为不同类型的不同方式实现模板类的方法是否有效C++?
- 如何有效地实现 std::tuple,使得空类型的元组本身就是空类型
- tail-n的有效实现
- 推力::max_element 比较慢 cublasIsamax - 更有效的实现
- 在 C++ 中实现包含有效负载的类的最佳做法
- 如何在C++中有效地实现无穷大和负无穷大支持算术
- 实现 Web 应用程序的张量分解的最有效语言
- 二进制堆的有效实现
- 编写函数RemoveDuplication()的最有效实现