如何在O(1)时空复杂度中找到排列中最大的数?

时间:2015-08-04 11:18:01

标签: c++ algorithm

我有非负整数N,我需要在N的排列中找到最大的数字。

例如,给定N = 213,函数应返回321

如何在O(1)时间和空间复杂度中执行此操作?

N是[0 ... 2,147,483,647]

范围内的整数

如果结果超过100 000 000,我们可以返回-1

3 个答案:

答案 0 :(得分:8)

您无法在O(1)中执行此操作,您必须基本上将数字列表从最高到最低排序,因此您可以根据排序算法的复杂性来实现最快速度。您可以看到各种排序算法here

的时间和空间复杂性

enter image description here

答案 1 :(得分:5)

计算每个数字的次数,然后创建一个首先具有最高位数的数字,然后创建下一个较小的数字等。

示例:N=234543

2: 1 time
3: 2 times
4: 2 times
5: 1 time

现在创建一个数字5作为第一个数字,然后4两次,3两次,2一次 - 因此得到544332

这是在O(Number of digits)中完成的,并不限于int的大小。它可以是任何数字(以字符串或类似的形式表示)。

这是counting sort的情况,其中不同项目的数量为10。

答案 2 :(得分:1)

如果您设置的数量有限,但内存很大,则可以为每个数字创建一个哈希值lol。 E.g:

A [“213”] = 321

A [“12”] = 21