java - 计算每个大小为 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+" ");
}
解决方案
您在数组中有相等的元素,whenm=8
和l=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=7
,i=7<8
代码再次开始执行下一个 for 循环,并且在第二个 for 循环中,直到j=6<7
条件,数组内有相等的元素:arr[7]
并且arr[1]
等于68,因此您将转到以下 if 语句,然后循环将中断并且打印计数为 1:
if (arr[7] == arr[1]) {
break;
}
在 IDE 上调试代码。你会看到结果。
推荐阅读
- linux - 如何使用 ipcalc 在 Bash 脚本中验证 IP?
- javascript - 如何从地图函数返回数据
- c# - 使用 XMLSerializer 在 WPF 应用程序中读取/保存设置文件
- r - 使用多个类别的 R 数据绘制图时遇到问题
- c - 添加两行并将总和存储在最后一行
- python-3.x - 如何使用 matplotlib plt.imshow 更改热图的 y 刻度标签?
- database - 如何在测试中模拟数据库
- backbone.js - Backbone.js:使用 RESTful API 时视图不会呈现
- python - “命令”没有属性“负载”
- python - 来自字符串的 Python 图形函数