c - 链表的时间复杂度是多少?
问题描述
假设您想在保持排序顺序的同时将n个元素插入一个空链表中。最坏情况时间是多少?
解决方案
如果,通过“保持排序顺序”,您的意思是它们已经排序,这是一个O(n)
操作,因为您只需将它们中的每一个都放在列表的末尾(并且您可以保留当前结尾的记录而不是搜索每次都为它):
make new list from first value, keeping pointer to last, O(1)
for curr in second and subsequent values, O(n):
add to list using last, update last, O(1)
如果您的意思是它们没有排序但它们应该是,那将是,因为每个新值都会导致搜索后跟插入:O(n2)
n
O(n)
O(1)
for curr in values, O(n):
find insertion point, O(n)
insert at that point, O(1)
推荐阅读
- angular - ngSwitch 中的@ViewChild 未定义
- ruby-on-rails - Ruby on Rails/Postgres - 如何为不存在的用户创建新数据库?
- xml - Google 表格中的 XPath
- c# - C# WPF StackPanel 中不需要的间距/图像大小调整
- qt - Qml 地图项偏移
- node.js - Firebase 函数返回 400
- recaptcha - reCaptcha 复选框旋转 15 秒,然后保持未选中状态
- python - Python 3:为动态类设置命名空间
- python - 在不使用 .pop 的情况下替换列表中的项目?
- javascript - Google Places Autocomplete Dropdown - 如何在没有建议的下拉列表中添加自定义行?