这是我为每个大小为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 1 1 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+" ");
}
你有数组中相等的元素,当m=8
和l=6
=> i=l
:在第一个循环中,i=6
,条件是i<m
,然后执行next 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
条件,数组内部有相等的元素:arr[7]
和arr[1]
等于68所以你将转到下面的if语句然后循环将中断并打印计数为1:
if (arr[7] == arr[1]) {
break;
}
在IDE上调试代码。你会看到结果。