繁体   English   中英

maxOccuringDigit() function 的时空复杂度是多少?

[英]What is the Time and space Complexity of maxOccuringDigit() function?

static int maxOccuringDigit(int n) {
    int tempNum = n;
    if (tempNum < 0)
        tempNum = -tempNum;

    int[] count = new int[10];

    while (tempNum != 0) {
        int rem = tempNum % 10;
        count[rem] = count[rem] + 1;
        tempNum = tempNum / 10;
    }

    int maxCount = count[0];
    int digit = 0;
    for (int i = 1; i < count.length; i++) {
        if (count[i] > maxCount) {
            maxCount = count[i];
            digit = i;
        } else if (count[i] == maxCount)
            digit = -1;
    }
    return digit;
}

任务是找出哪个数字出现的次数最多。 我需要帮助来分析这个 function 的时间复杂度。 我认为它应该是O(k),其中 k 是给定数字 n 的总位数。 主要是我对这里使用的 for 循环的时间复杂度感到好奇。 由于它总是循环 10 次,我们可以认为它是恒定时间操作吗?

所以总 O(k + 10) ~ O(k) 时间 那是对的吗?

同样对于空间复杂度,它仅使用 10 个额外的数组空间,那么它的空间复杂度也将是多少?

while 循环将运行log10(N)次。 是的,for 循环为 N 运行一次,它运行 10 次的事实可以忽略不计,即 C = 10。

所以你的方法的运行时复杂度是log10(N) + C并且因为 C 可以忽略不计, log10(N)是它的运行时复杂度。

空间复杂度为O(1)

第一个循环取决于位数k ,并且是O(k) 第二个循环取决于count数组中的元素数,即 10。因为这是一个常数,所以它在O(1)中运行。 因此,整体时间复杂度为O(k)

空间复杂度为O(1)的原因与第二个循环的时间复杂度为O(1) (1) 的原因相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM