【发布时间】:2010-07-26 22:37:28
【问题描述】:
给定一个数组 A,它包含 1,2,...,n 的排列。一个子块 A[i..j]
如果数组 A 中的所有数字都出现在 A[i..j]
是连续的数字(可能不按顺序)。
给定一个数组 A= [ 7 3 4 1 2 6 5 8] 有效块是 [3 4], [1,2], [6,5],
[3 4 1 2]、[3 4 1 2 6 5]、[7 3 4 1 2 6 5]、[7 3 4 1 2 6 5 8]
所以上述排列的计数是 7。
给出一个 O(n log n) 算法来计算有效块的数量。
【问题讨论】:
-
一个快速的谷歌搜索显示它之前在 SO 和另一个网站上被问过,但没有人弄清楚。我没有考虑太多,但如果可能的话,我猜它涉及一些巧妙的数学技巧。恭喜谁解决了...
-
天啊,动态编程伤了我的脑筋。
-
你不能比
O(N^2)做得更好,因为在排序序列的琐碎情况下,你将得到O(N^2)结果。有趣的问题。想到动态编程或分而治之。 -
@Nikita Rybak,啊......他们只是想要一个总数。一定是一个非常聪明的算法。这可能是一个可怕的面试问题 - 大多数优秀的开发人员不会在给定的时间内解决它,而那些能够解决的人可能无论如何也无法在那里工作。
-
复制:stackoverflow.com/questions/1824388/…,具有相同的数据和公式
标签: algorithm permutation