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

Ana*_*oly -1 c++ algorithm

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

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

如何在O(1)时间和空间复杂性方面做到这一点?

N是[0 ... 2,147,483,647]范围内的整数

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

Cor*_*mer 8

你不能这样做O(1),你必须从最高到最低的数字列表排序,所以你可以做的最快是基于排序算法的复杂性.您可以在此处查看各种排序算法的时间和空间复杂性

在此输入图像描述

  • 请注意,这是一个非常特殊的情况,其中元素的值集非常有限.您可以在O(N)时间内对其进行排序,N是数字位数.通常情况下,人们会选择快速排序作为选择算法,但这次不是. (3认同)

sha*_*cov 5

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

例: N=234543

2: 1 time
3: 2 times
4: 2 times
5: 1 time
Run Code Online (Sandbox Code Playgroud)

现在创建一个5曾经作为第一个数字,然后4两次,3两次和2一次的数字 - 因此你得到了544332.

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

这是一种计算排序的情况,其中不同项目的数量是10.