【发布时间】:2014-12-13 06:15:58
【问题描述】:
问题来了:
给定一个包含 N 个元素(1 到 N)的数组,使用一个约束对数组进行排序:您只能将一个元素移动到数组的开头或数组的结尾。你至少需要多少步才能对数组进行排序?
例如:2 5 3 4 1 => 1 2 5 3 4 => 1 2 3 4 5,所以我至少需要两步。
我想出了一个解决方案:N - length of longest increasing subsequence,在上面的例子中,答案是5 - 3 = 2。
我知道一个O(NlogN) 算法来查找最长递增子序列 (LIS)。但是由于数组中的元素在[1, N] 中,我想知道是否有O(N) 解决方案来查找数组的LIS?
或者,鉴于我们知道元素是从 1 到 N,是否有 O(N) 解决方案来解决初始问题?
【问题讨论】:
-
您要对数组进行排序还是查找 LIS?
-
我只想知道使数组排序的最少移动次数。我发现如果LIS的长度已知,问题就解决了。所以我要问的是给定特殊元素的 O(N) 解决方案。
标签: arrays algorithm permutation