小编典典

给定数字可以形成的最大数字

algorithm

给定一个整数,找到可以由数字形成的最大数字。输入:8754365输出:8765543

我以$ O(n logn)$告诉解决方案。他要求我进一步优化。

我们可以使用哈希表进一步优化$ \ rightarrow $ O(n)

算法:1.取一个大小为10(0到9)的哈希表。2.存储从0到9的每个数字的计数。3.以相反的方向(从9到0)打印哈希表相对于数字计数的索引。

例:

数字计数后的哈希表8754365 $ \ rightarrow $(0 0 0 1 1 2 2 1 1 1 0)打印哈希表相对于其计数的索引以相反的顺序$
\ rightarrow $ 8765543时间复杂度:O(n)如果我错了,请纠正我。


阅读 277

收藏
2020-07-28

共1个答案

小编典典

以下贪婪代码在O(n)时间内完成此操作。其中n是数字中的位数。

int num = 8756404;
int[] times = new int[10];
while(true){
    if(num==0){
        break;
    }
    int val = num%10;
    times[val]++;
    num /= 10;
}
for(int i=9; i>=0; i--){
    for(int j=0; j<times[i]; j++){
        System.out.print(i);
    }
}

它通过计算输入数字中每个数字的出现次数来工作。然后以相反的顺序打印每个数字在输入数字中的次数,即。从9到0。

2020-07-28