arrays - 是否可以使用 Floyd 的龟兔算法在 O(n) 时间、O(1) 空间复杂度内从未排序的数组中删除重复项?
问题描述
是否可以使用 Floyd 的龟兔算法在 O(n) 时间、O(1) 空间复杂度内从未排序的数组中删除重复项?考虑数组 [3,1,3,4,2]。删除重复项后,函数“remove_dups”必须返回 [3,1,4,2]。此外,该函数应该对数组中的负整数起作用。
解决方案
对的,这是可能的。这个想法是将数组项视为链表节点。任何特定索引都指向该索引处的值。
你会看到在重复的情况下存在循环,两个索引将具有相同的值,并且它们将形成一个循环,如下图所示。
例子:
1->2->3->4->5->6->3
所以我们可以在链表中找到循环的入口点,这将是我们的重复元素。
来源:https ://www.geeksforgeeks.org/find-duplicates-constant-array-elements-0-n-1-o1-space/
推荐阅读
- google-drive-api - 通过 Drive API 获取插件列表
- angular - Angular BehaviorSubject 未在 mat 排序后更新 mat 表 UI
- arraylist - 类型转换错误尝试使用在没有 Math.round 的情况下舍入 Double ArrayList 的值的方法
- javascript - 为什么我的 JavaScript 可拖动滑块不起作用?
- sql - PLS-00103:在 PL/SQL 脚本中预期以下之一时遇到符号“=”
- mysql - 如何优化重复搜索查询
- python - 在任务运行之前设置唯一用户?
- c# - 将值异步写入 Razor 页面字段
- docker - 使用 Azure Pipeline 构建 docker 映像时找不到 .csproj 文件
- kubernetes - kubernetes:将环境变量设置为整数