计算每个大小为k的窗口中的不同元素

时间:2018-07-08 18:04:58

标签: java arrays

这是我编写的用于在大小为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+" "); 
}

1 个答案:

答案 0 :(得分:0)

m=8l=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=7i=7<8的情况下,代码再次开始执行next for循环,在第二个for循环中,直到j=6<7条件,数组内有相等的元素:{{1 }}和arr[7]等于 68 ,因此您将转到以下if语句,然后循环将中断并打印计数为1:

arr[1]

在IDE上调试代码。您将看到结果。