读书人

请问:判断n位数1的个数的时间复杂度是

发布时间: 2012-08-11 20:50:31 作者: rapoo

请教:判断n位数1的个数的时间复杂度是多少,为什么,谢谢

C/C++ code
int NumberOfOne(int num){   int count =0;   while(num)   {    if(num%10==1)count++;   num/=10;   }  return count;}


[解决办法]
一般而言,一个算法的执行时间的求解问题的规模n的函数,这是因为问题的规模往往决定了算法工作量的大小。但是,我们不关心它是个怎样的函数,只关心它的数量级量度,及它与什么简单函数f(n)是同一个数量级的。
常见的时间复杂度,按数量级递增排序有:常数阶O(1)、线性阶O(n)、平方阶O(n2)、立方阶O(n3)等
其中O是数学符号
而你的这个程序的问题规模明显就是数的位数n,故时间复杂度为O(n)
[解决办法]
探讨
C/C++ code

int NumberOfOne(int num)
{
int count =0;
while(num)
{
if(num%10==1)count++;
num/=10;
}
return count;
}

[解决办法]
探讨
看输入。
对于一个int。
完全可以做到logn

[解决办法]
用容斥原理最简单,没有之一。。

参见这个题目:http://sznoi.cn/oj/ShowProblem?problemid=m005

读书人网 >C语言

热点推荐