给定一个整数,求出从数字中可以形成的最大数。
输入:8754365
产量:8765543
我用$O(n logn)$告诉了解决方案他要求我进一步优化。
我们可以使用哈希表进一步优化,$\rightarrow$o(n)
算法:
一获取大小为10(0到9)的哈希表。
2.存储从0到9的每个数字的计数。
三。按相反方向(从9到0)打印与数字计数相关的哈希表索引。
例子:
8754365$\rightarrow$(0 0 1 1 2 1 1 1 0)的数字计数后的哈希表
按相反顺序打印哈希表的索引$\rightarrow$8765543
时间复杂度:O(n)
如果我错了就纠正我。

最佳答案

下面的贪心code在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。

关于algorithm - 给定数字可以形成的最大数字,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29164080/

10-16 23:29