最近遇到一道很有趣的算法题:

给与数组N[0, n)跟M[0, m),并且m <= n,其中M的元素都在[0, n)以内,换句话说可以用M索引N。这个时候,我们对每个M里面的元素m,找出N里面第m大的元素,换句话说,我们要计算出

map (\m_element -> sort n !! m_element) m

比如说,假如N是[1, 9, 3, 8, 10, 7, 2, 10, 8],M是[7, 2, 0],结果应该是[10, 3, 1]

但是,我们希望平均时间复杂度是O(n log m),这怎么做?(注意,这比n log n小,而很多做法都是后者)

为了给大家一些思考时间,明天再放答案

更新:答案在https://zhuanlan.zhihu.com/p/578991429