操作频率
问题描述:
对于这个代码操作频率
int count=0;
for(int i=0;i<N;i++)
if(a[i]==0)
count++;
我的线人说:
frequency for variable declaration is 2
frequency for assignment statement is 2
但此代码:
int count=0;
for(int i=0;i<N;i++)
for(int j=i+1;j<N;j++)
if(a[i] + a[j] == 0)
count++;
它说:
frequency for variable declaration is N+2
frequency for assignment statement is N+2.
我不明白为什么结果是第二个代码的N + 2。我认为它应该是3的变量声明。你能告诉我这两个代码部分的区别吗?
答
是的。这是正确的,因为j
为每个迭代i
声明一次。所以对于j
N次,然后对于i
和count
再进行2次。
在使用相同逻辑的第一种情况下,您将看到有2个声明。
一旦您理解了声明逻辑,赋值语句也是清楚的。
int count=0; <--- declaration +1
for(int i=0;i<N;i++) <--- int i = 0 <-- +1
for(int j=i+1;j<N;j++) <-- i=0,1,2..N-1 <-- N times
if(a[i] + a[j] == 0)
count++;
答
请记住j
在i
的循环中声明。因此,它将在循环的每次迭代中声明。有N
迭代i
的循环,所以它将被宣布为N
次。 i
将被声明一次,并且count
将被声明一次,因此总共是N + 2
声明。
同样的作业。
答
在此 -
int count=0;
for(int i=0;i<N;i++)
for(int j=i+1;j<N;j++)
if(a[i] + a[j] == 0)
count++;
j
在内环被声明为多次上部循环迭代是N
次。这是因为对于上层循环的每次迭代,内层循环都会重新开始。
而且count
和i
被声明一次。因此,你得到N+2
频率。