【发布时间】:2015-09-20 00:25:27
【问题描述】:
对于课堂上的这个算法作业,我必须在 1000x250 二维数组中找到所有唯一值。
数据在 2000000 到 2200000 之间。所有数据都存储在一个名为 data 的 2D int 数组中。
我遇到的问题是运行它需要一些时间,我的教授说我们不能使用其他数据集,而且我们需要优化我们的代码,以便它以良好的速度运行。
int[] uniqueValues = new int[200000];
boolean isUnique = true;
int uniqueCounter = 0;
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++) {
for (int x = 0; x < uniqueCounter; x++) {
if (data[i][j] != uniqueValues[x]) {
isUnique = true;
} else {
isUnique = false;
break;
}
}
if (isUnique) {
uniqueValues[uniqueCounter] = data[i][j];
uniqueCounter++;
}
}
}
【问题讨论】:
-
这个问题应该去代码审查:codereview.stackexchange.com
-
“我的教授说我们不能使用其他数据集” - 这没有意义。可能你翻译错了。他实际上说了什么?
-
你应该使用 Set。如果不允许使用预定义的 Set 实现,则应创建自己的 Set 数据结构。
-
另外,你的“教授”有没有说你必须优化它? '因为他的(明显的)指示不创建单独的数据结构使得明显有效的解决方案变得不可能。我怀疑他希望你在这个练习中了解数组和循环......而且这种“让它快速运行”是一个非要求,你不应该浪费你的时间。
标签: java algorithm optimization unique