【问题标题】:count distinct elements in every window of size k计算每个大小为 k 的窗口中的不同元素
【发布时间】:2018-07-08 18:04:58
【问题描述】:

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

【问题讨论】:

  • Stack Overflow 不是免费的调试服务,您应该展示您使用调试器或其他更简单的方法(例如调试打印语句)调试代码的尝试。您还可以分别测试代码的每个部分,以准确找出导致问题的代码部分,并创建minimal reproducible example。这不是您唯一一次在代码中遇到错误,学习调试程序比让别人为您找到错误对您的帮助要大得多。 idownvotedbecau.se/nodebugging最后,你甚至没有说明这是什么语言。
  • 尝试在内部循环中添加一些System.out.println 语句,并转储变量的状态。更容易理解程序在做什么
  • "计算每个大小为 k 的窗口中的不同元素" 这意味着?您想知道数组中有多少个不同的值?

标签: java arrays


【解决方案1】:

m=8l=6=>i=l 时,数组中的元素相等: 在第一个循环i=6,条件是i&lt;m,然后开始执行下一个for循环,在第二个for循环中,直到j=5&lt;6条件,没有相等的元素,所以代码继续

      if(i==j){ //i =6, j =6
          count++;
      }

在下一次执行代码时,count 将为 1。在if(i==j) 条件之后,第二个循环结束,然后返回到条件i=7&lt;8 的第一个循环(因为增量i++)。 在i=7i=7&lt;8的情况下,代码再次开始执行下一个for循环,并且在第二个for循环中,直到j=6&lt;7条件,数组中的元素相等:arr[7]arr[1]相等68 所以你将转到下面的 if 语句,然后循环将中断并打印计数为 1:

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

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

【讨论】:

猜你喜欢
  • 2018-04-20
  • 1970-01-01
  • 2013-01-24
  • 2019-11-14
  • 2021-12-20
相关资源
最近更新 更多