我有非负整数N,我需要在N的排列中找到最大的数字。
例如,给定N = 213
,函数应返回321
。
如何在O(1)
时间和空间复杂度中执行此操作?
N是[0 ... 2,147,483,647]
范围内的整数如果结果超过100 000 000
,我们可以返回-1
答案 0 :(得分:8)
您无法在O(1)
中执行此操作,您必须基本上将数字列表从最高到最低排序,因此您可以根据排序算法的复杂性来实现最快速度。您可以看到各种排序算法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
等