【发布时间】:2018-08-11 05:31:53
【问题描述】:
假设我有一个数组:
[1, 8, 5, 6, 10, 9, 11, 12];
我想按升序对其进行排序,但找出我需要排序的最大组数。在这个例子中,答案是:
[1], [8,5,6], [10,9], [11], [12]: so 5
[3, 2, 1] 会变成 1,因为整个数组都需要排序。
我完全不知道如何做到这一点,我们将不胜感激。
【问题讨论】:
-
你可以遍历数组并计算 n[i+1] > n[i] 的次数
-
是需要排序的最大连续组吗?
-
看起来是 Tarjan 的强连通分量算法的一个很好的例子。
-
@GrumpyWelshGit 这不起作用,因为一个更大的数字可能在一个组的中间
-
@Dvorog 只是可以创建所有组。因此,即使某些数字被排序,例如 [1] 和 [11],它们仍然算作一组 1。像 [8,5,6] 这样的组是因为在该组中,您可以对所有数字进行排序到它们的适当位置。如果我在 9 之后添加 2,那么整个部分将改为 1 组。
标签: java arrays algorithm sorting grouping