找到给定数字的下一个更大的字谜

时间:2012-10-02 06:01:11

标签: data-structures anagram

找到给定数字的下一个更大的字谜会有什么有效的算法?

示例:

  1. 输入:7813 - >输出:7831
  2. 输入:3791 - >输出:3917
  3. 输入:4321 - >输出:(无)

1 个答案:

答案 0 :(得分:3)

基本上你从右到左移动数字。一旦找到减少的数字,那么你就停止了。将该数字与所有之前的数字进行比较。将其替换为下一个最高位,然后按升序对其余位进行排序。例如:

取978654321。 1)从右向左移动,直到你得到一个递减的数字:

Stop at the 7 because that is the first digit that decreases.

2)找到我们已经看过的下一个最大数字:

out of 1 2 3 4 5 6 and 8, 8 is the next largest digit to 7.

3)按递增顺序对剩余数字进行排序,并将其追加到最后。

1234567

哪个产生981234567

复杂性:

n是位数。

步骤1)O(n)因为在最坏的情况下数字增加(或保持不变)直到最后一位数。

步骤2)O(n)因为在最坏的情况下你必须将这个数字与所有n个数字进行比较。

步骤3)O(n lg n),因为你必须排序,最好的排序算法是nlgn。

因此该算法在O(n lg n)中运行。再次,其中n是数字中的位数。