Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MaxOccuringDigital()函数的时间和空间复杂度是多少? static int maxOccuringDigit(int n){ int tempNum=n; if(tempNum_Java_Arrays_Function_Time Complexity_Big O - Fatal编程技术网

Java MaxOccuringDigital()函数的时间和空间复杂度是多少? static int maxOccuringDigit(int n){ int tempNum=n; if(tempNum

Java MaxOccuringDigital()函数的时间和空间复杂度是多少? static int maxOccuringDigit(int n){ int tempNum=n; if(tempNum,java,arrays,function,time-complexity,big-o,Java,Arrays,Function,Time Complexity,Big O,任务是找出哪个数字出现的次数最多。我需要帮助分析这个函数的时间复杂度。我认为应该是O(k),其中k是给定数字n中的总位数。 我主要对这里使用的for循环的时间复杂性感到好奇。因为它总是循环10次,我们可以把它看作是常数时间运算吗? 因此总O(k+10)~O(k)时间。对吗 另外,对于空间复杂度,它只使用了10个额外的数组空间,那么它的空间复杂度也是多少?while循环将运行log10(N)次。是的,for循环只运行一次N次,而它运行10次的事实可以忽略不计,即C=10 因此,您的方法的运行时复杂

任务是找出哪个数字出现的次数最多。我需要帮助分析这个函数的时间复杂度。我认为应该是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)

我们如何得出log10(N)时间的结论相同。你能解释为什么是logN吗?@NirmalSilwal检查我的答案。N是数字本身,而不是数字计数。运行时复杂性应该根据输入本身而不是数字的数量来表示。好吧,我同意这一点。你能解释一下logN是如何在这里选取的吗?@NirmalSilwal你的while循环的运行次数将是以10为底的N中的位数的两倍。阅读此处了解更多信息:如果N是1000000(一百万),那么循环将运行7次,这是它的数字计数。7=log10(1000000)+1.好的,谢谢你提供的详细信息现在我想知道时间的复杂性,虽然我也认为它应该是O(k),@Juvanis answer说它是O(log10N)?我不认为它是O(logn)(或者O(logk))。因为你基本上只把TimnUm的长度减少了1个循环。确切地说,当我们每次减少一半的大小时,我们可以认为它是O(Logn),这里没有这样的消除步骤。N是数字本身,而不是数字计数。运行时复杂性应该根据输入本身而不是数字计数来表示。O(k+10)正好等于O(k)。
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;
}