我在接受采访时得到了这个问题。有一组与起始值和结束值相关联的对象。与每个对象关联的计数是具有更大开始时间和更短结束时间的其他对象的数量。所以我必须找到与每个对象相关的计数。
我提出了O(n ^ 2)解决方案,首先我对起始值进行了排序,然后使用下一个对象的结束值检查每个对象的结束值以获得计数。可以有更好的算法来解决这个问题。
答案 0 :(得分:3)
我没有找到解决问题的简单方法,也许有点复杂。
我提出了一个O(nlogn)
解决方案。与您的解决方案一样,首先我按照降序顺序对起始值进行排序。然后申请一个新的数组a[]
,保持结束值的出现次数(即,当遇到一个对象(开始,结束)时,make {{1 }} 加一)。然后遍历对象数组,对于a[end]
对象i
,我们只需要将 sum(a [i] | 0< = i< = end)添加到最终答案中,然后使用(start, end)
更新数组a
,a[end] ++
查询,我们可以使用Fenwick tree或Segment tree计算sum()
中的每个查询,总复杂度为O(logn)
。