【发布时间】:2021-11-23 06:12:27
【问题描述】:
假设我有一个vector<int> datas = {10, 5, 6, 8 }
还有一个vector<int> index = {0, 2}(可以是未排序的,例如:{2,0} 或 {3,1,2})
该函数需要删除索引0和2处的数据并保持顺序。
所以对于这种情况,我会得到:result = { 5, 8 }
在最坏的情况下 Θ(n) 怎么可能做到这一点?
我尝试的每个解决方案总是有一个嵌套循环,它比 Θ(n) 慢..
注意:没有重复,索引向量的大小总是
我也在尝试用基本的 for 循环和索引来做到这一点,没有花哨的 c++ 库的东西..
有什么想法吗?谢谢。
【问题讨论】:
-
索引向量是否总是排序的?
-
@MrSmith42 不!
-
如果没有排序
index它可以在O(m log m + n)中完成(m大小为index)。 -
尝试先对索引向量进行排序:
for(int i=0; i<index.size(); i++) { datas.erase(std::next(datas.begin(), index[i])); } -
假设数据中有 n 个项目,索引中有 m 个项目,您可以在 Theta(m) 时间内从索引构建某种 O(1) 查找集。哈希集很简单,但您也可以使用 m 位数组。那是 Theta(n+m) =Theta(n) 时间(因为 m
标签: c++ algorithm time-complexity