【发布时间】:2020-08-09 05:02:05
【问题描述】:
我有一个大小为 N(Ar[N]) 的数组 Ar。我必须将 Ar[N] 划分为大小为 K 的子数组,然后将它们添加到 Set S 中。
例如,如果 Ar[5] = {1,2,3,4,5} 和 K = 3
然后,
子数组将是{1,2,3},{2,3,4},{3,4,5}
现在我必须将这些子数组添加到 Set 并继续我的计算。
这是我的代码:
int max = 0;
for(int j=0;j<=N-k;j++){
Set<Integer> set = new HashSet<>();
for(int l=j;l<j+K;l++){
set.add(Ar[l]);
}
if(set.size >= max) max = set.size;
}
System.out.println(max);
有什么方法可以摆脱嵌套的 for 循环,因为在最坏的情况下 N 可以是 1000000。
注意:该集合应该只包含唯一值。
希望我清楚。
【问题讨论】:
-
鉴于您所说的问题,实际上没有一种方法可以提高效率。您所做的任何事情最终都需要完成 O(NK) 工作。
-
你能给出完整的问题陈述吗?因为在这个层面上我同意路易斯的观点
-
你能展示一下你是如何使用子数组的吗?也许可以改变程序,所以没有必要完全构建这个集合
-
嗨@Joni,我计算了集合的最大大小。我将它添加到我的代码中。请看一下。
-
但在我们的代码中,我看到的是一组整数而不是一组整数数组。我错过了什么?