首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可由给定数字构成的最大数目。

可由给定数字构成的最大数目。
EN

Stack Overflow用户
提问于 2015-03-20 10:14:14
回答 2查看 6.2K关注 0票数 1

给定一个整数,找到可以由这些数字形成的最大数目。输入: 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 1 2 1 1 1 0)的数字计数后的哈希表(0 0 0 1 1 2 1 1 1 0)按反序$\rightarrow$ 8765543的时间复杂度打印哈希表的索引:如果我错了,O(n)更正我。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-20 10:32:04

以下贪婪的代码在O(n)时间内这样做。其中n是数字中的数字数。

代码语言:javascript
复制
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。

票数 2
EN

Stack Overflow用户

发布于 2020-02-04 12:27:39

RunTime:00:00:00.01

代码语言:javascript
复制
public int Assignment(int number) 
{
    // Consider that int.MaxValue equals to 2147483647
    var siblingString = String.Join("", number.ToString().ToCharArray().OrderByDescending(n => n));
    int sibling = -1;
    if (!int.TryParse(siblingString, out sibling) || sibling > 100000000)
    {
        return -1;
    }
    return sibling;
}

使用以下代码测试性能:

代码语言:javascript
复制
static void Main()
{
    Stopwatch stopWatch = new Stopwatch();

    stopWatch.Start();
    var result = AssignmentOne(2147483646);
    stopWatch.Stop();

    TimeSpan ts = stopWatch.Elapsed;
    string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10);
    Console.WriteLine("RunTime " + elapsedTime);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29164080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档