Sha*_*kti 6 java arrays performance
我有两个相同大小的整数数组,比如n(n是可变的,所以我可以有两个大小的数组,比如4或5或6等),每个数字可以取的值范围是0-9.例
Integer[] one = {1,9,3,4}
Integer[] two = {1,1,9,3}
Run Code Online (Sandbox Code Playgroud)
现在,我想比较第一和第二阵列,以便 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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
问:现在我想知道是否有更快的方法来做同样的事情?ESP.计算问题的(2)部分.这是获得Mastermind棋盘游戏的黑白钉计算的基本比较方法.谢谢Shakti
更新1: 1)Rudi的建议将Integer []更改为int []
2)使用Dave Challis的解决方案7776 X 7776计算的性能变化
OLD 46950 ms
NEW 42887 ms
Run Code Online (Sandbox Code Playgroud)
虽然这可能不是您想要的,但我们可以通过非常简单的更改显着减少操作次数.
从
Integer[] one = {1,9,3,4}
Integer[] two = {1,1,9,3}
Run Code Online (Sandbox Code Playgroud)
至
int[] one = {1,9,3,4}
int[] two = {1,1,9,3}
Run Code Online (Sandbox Code Playgroud)
这将使该过程加速少量,但不是通过优化排序/搜索逻辑本身.我们所做的就是删除自动装箱和自动拆箱操作.但是,如果你这么大规模地这样做,那么这可以产生实质性的差异.
| 归档时间: |
|
| 查看次数: |
3269 次 |
| 最近记录: |