这是我编写的用于在大小为k的每个窗口中计算不同元素的函数。但是我输入错误答案
n = 17,k = 2
69 68 30 83 31 63 24 68 36 30 3 23 59 70 68 94 57
我正在输出2 2 2 2 2 2 1 1 1 1 2 2 2 2 1 1 2
正确的输出是2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
如果在给定大小(k = 2)的窗口中没有相似的元素,那么1怎么能进入输出?
void countDistinct(int arr[], int k, int n)
{
int i,j,l,m=0;
l=0;
while(m!=n){
int count=0;
m=k+l;
for( i=l;i<m;i++){
for( j=0;j<i;j++){
if(arr[i]==arr[j]){
break;
}
}
if(i==j){
count++;
}
}
l++;
System.out.print(count+" ");
}
答案 0 :(得分:0)
当m=8
和l=6
=> i=l
时,数组中的元素相等:
在第一个循环i=6
中,条件为i<m
,然后执行下一个for循环,在第二个for循环中,直到j=5<6
条件,没有相等的元素,因此代码以
if(i==j){ //i =6, j =6
count++;
}
在下一次执行代码时,count
将为1。在if(i==j)
条件之后,第二个循环结束,然后以条件i=7<8
回到第一个循环(因为递增i++
)。
在i=7
和i=7<8
的情况下,代码再次开始执行next for循环,在第二个for循环中,直到j=6<7
条件,数组内有相等的元素:{{1 }}和arr[7]
等于 68 ,因此您将转到以下if语句,然后循环将中断并打印计数为1:
arr[1]
在IDE上调试代码。您将看到结果。