我很困惑这两个代码的时间复杂度是相同还是不同。
code1
#include<iostream>
using namespace std;
bool check(int a[])
{
if(a[0]==1 && a[1]==1 && a[2]==1 && a[3]==1 && a[4]==1 && a[5]==1 && a[6]==1)
return true;
return false;
}
int main()
{
int a[7] = {1,1,1,1,1,1,1};
if(check(a))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
return 0;
}
代码2
#include<iostream>
using namespace std;
bool check(int a[])
{
for(int i=0;i<7;i++)
{
if(a[i]!=1)
return false;
}
return true;
}
int main()
{
int a[7] = {1,1,1,1,1,1,1};
if(check(a))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
return 0;
}
当我在http://www.lizard.ws在线检查时,它表明代码2的时间复杂度比代码1小。如果为真,为什么?请有人给我原因。
答案 0 :(得分:2)
对于您而言,您对输入中的每个项目都执行一次相同的操作。
if..else只是对每个项目执行一次的普通声明。它既不增加也不减少运行时间/复杂度。您的算法为O(1)。
如果按照lizard.ws 2的代码有效,则可能是由于每次在代码1中都必须检查所有条件,尽管在代码2中每次都必须检查单个条件
答案 1 :(得分:1)
两个示例的时间复杂度相同。特别是因为您没有可变数量的元素,而是固定数量的元素。由于它是一个固定数字,因此时间复杂度为O(1),但是如果numElements
(在7处硬编码)是变量,则时间复杂度将为O(n)。