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

问题描述 投票:-5回答:1

这是我为每个大小为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+" "); 
}
java arrays
1个回答
0
投票

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

      if (arr[7] == arr[1]) {
         break;
      }

在IDE上调试代码。你会看到结果。

© www.soinside.com 2019 - 2024. All rights reserved.