首页 > 解决方案 > 计算每个大小为 k 的窗口中的不同元素

问题描述

这是我为计算每个大小为 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+" "); 
}

标签: javaarrays

解决方案


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

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

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


推荐阅读