【发布时间】:2015-03-29 10:39:13
【问题描述】:
我有一个结构向量。
结构有两个元素X和Y,其值如下图所示。
假设:
索引 0 1 2 3 4 5 6 7 8 9
值 a,b c,d e,f g,h a,b a,i a,i a,i j,k l,m
我的问题:** 我需要保留元素 (x,y) 的**最新出现,并在有效的时间内删除其余元素,并可能使用辅助空间。
说,我从向量的开头开始,遇到元素(a,b),我需要删除这个元素加上所有其他的(a,x)s,这里x可以是任何东西,但不能b,但保留最新的 (a,b)。
在这里,我需要删除索引 0、5、6、7 处的元素,并保留 4 处的元素。
元素是使用 vector.push_back() 插入的,因此最新的元素是最后插入的元素。 (插入模仿队列)
我的进步:
i) 我尝试了一个稳定的排序,但考虑到我可能会遇到 O(nlogn) 复杂性,我对这种方法不感兴趣。
ii) 这样的设计,我只能从头开始迭代,而我不能逆转它并从头开始。
iii) 为了降低复杂性,我做了类似的事情:
- Iterate vector from start to end.
- For every elements, keep the search area to a smaller one by searching from the end.
- Then delete all elements between current positions of forward iterator and the reverse iterator. This does not take the above illustrated case into consideration and works only when the most recent element is towards the end, i.e.in the above case, all (a,i)s are before the last (a,b)
【问题讨论】:
-
您的问题是关于效率还是只是如何从向量中删除?
-
我在您的...问题中找不到任何问题...
-
我认为您应该将向量复制到新向量,只保留您想要保留的元素。这是在一个 for 循环中完成的,我认为您不太可能做得比这更有效。
-
@AlexPetrenko:我尝试在一次迭代中使用位集和标记元素,然后在后续迭代中使用设置位删除元素。但是,我正在寻找一种有效的方法(如果存在)。