0
我在考试中提出了一个问题,我不得不提出一个有效的算法。问题是这样的:如何在O(nlogn)时间复杂度下完成
我们有一些对象具有两个属性:
H = <1,1000000>
R = <1,1000000>
如果H1>H2
和R1>R2
我们可以插入一个对象到另一个。输入包含H
和R
对,每行一对。如果当前对象可以插入任何以前的对象中,我们至少选择这样的对象,然后我们销毁它们。打印输出中左侧对象的数量。
我不知道如何解决这个问题在O(n.log(n))
时间复杂性使用二叉搜索树或分段树,或与fenwick树。
在此先感谢。
您应该添加一个示例输入和输出,这样问题就非常清楚了。如果我把它正确的(我不能从你的文本中100%确定),我会首先用'H(n.log(n))''H,R'对项目进行排序,然后扫描列表扫描(标记删除的对象而不是删除它们)只打印左边的项目 – Spektre
@Spektre,如果删除的对象数量接近'n(n)',则扫描将为'O(n ** 2)' '。 –
@SergeRogatch没有,因为我写了没有实际的删除将被完成只是标记项删除,而不是...因为这只是顺序扫描(类似于合并2排序列表)它应该仍然在'〜O(n)'宇总是继续从上一次使用的索引不是从每次迭代开始 – Spektre