查找给定数字的下一个较大的字谜

Posted

技术标签:

【中文标题】查找给定数字的下一个较大的字谜【英文标题】:Finding the next larger anagram of a given number 【发布时间】:2012-09-23 00:12:32 【问题描述】:

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

例子:

    输入:7813 -> 输出:7831 输入:3791 -> 输出:3917 输入:4321 -> 输出:(无)

【问题讨论】:

您的示例 2 会不会更像 3791 => 3917 【参考方案1】:

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

请拨打 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 是数字中的位数。

【讨论】:

以上是关于查找给定数字的下一个较大的字谜的主要内容,如果未能解决你的问题,请参考以下文章

从单词列表中查找给定句子的字谜

在文件中查找给定单词的字谜

算法:按字典顺序在给定索引处查找给定字符串的字谜

查找给定字符串中包含的字谜

在给定的字符串列表中查找字符串的所有字谜

从给定的数字中查找下一个最高的唯一数字