【发布时间】:2014-07-22 09:07:13
【问题描述】:
我有两个整数数组,每个 大小相同,比如 n(n 是可变的,所以我可以有两个大小为 4 或 5 或 6 等的数组)以及每个数字的值范围可以取的范围是0-9。 示例
Integer[] one = {1,9,3,4}
Integer[] two = {1,1,9,3}
现在,我想比较数组一和二,这样 1) 我可以获得相同且位于相同位置的元素的数量。 2)我可以得到相同但不在同一位置的数字。
我采取的方法是
对于 (1) 遍历数组 1 并为每个索引检查 one[i] == two[i]。 - 简单。
对于 (2) 遍历两个数组,对于 i != j,查看元素是否相同,如果相同,用 -1 标记它们以避免将来发生冲突。
for(int i =0;i<one.length;i++){
for(int j=0;j<two.length;j++){
if(i != j && one[i] != -1 && two[j] !=-1)){
if(one[i] == two[j]){
whiteCount++
one[i] = -1;
two[j] = -1;
}
}
}
}
问题:现在我想知道是否有更快的方法来做同样的事情?特别是。计算问题的(2)nd 部分。 这是获得Mastermind棋盘游戏黑白钉计算的基本比较方法。 谢谢 沙克蒂
更新 1: 1) Rudi 的建议将 Integer[] 改为 int[]
2) 使用 Dave Challis 的解决方案 性能变化 对于 7776 X 7776 计算
OLD 46950 ms
NEW 42887 ms
【问题讨论】:
-
@lpratlong OP 也要求在同一位置获取数字。
-
@Ipratlong - 我不这么认为
-
你在Levenshtein Distance之后吗?
-
多个匹配项呢?你希望如何处理这些。例如
Integer[] one = {1,9,2,1};和Integer[] two = {6,1,7,4};。您希望这里有多少场比赛? 1 或 2 用于您的 2) 案例? -
顺便说一句,我还建议使用 visualvm 或类似工具来分析您的代码,并找出大部分时间实际花费在哪里,它应该会给您一些关于要花费哪些代码的提示优化时间。
标签: java arrays performance