微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有更快的方法来比较Java中的两个Int数组?

我有两个相同大小的整数数组,比如n(n是可变的,所以我可以有两个大小的数组,比如4或5或6等),每个数字可以取的值范围是0-9 .
Integer[] one = {1,9,3,4} 
Integer[] two = {1,1,3}

现在,我想比较一号和一号两个这样的
1)我可以获得相同且位置相同的元素数量.
2)我可以得到相同但不在同一位置的数字计数.

我采取的方法

对于(1)迭代数组1并且对于每个索引,我检查一个[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;
            }
        }
    }
}

问:现在我想知道是否有更快的方法来做同样的事情? ESP.计算问题的(2)部分.
这是获得Mastermind桌面游戏的黑白钉计算的基本比较方法.
谢谢
沙克蒂

更新1:
1)Rudi的建议将Integer []更改为int []

2)使用Dave Challis的解决方
性能变化
对于7776 X 7776计算

OLD 46950 ms
NEW 42887 ms

解决方法

虽然这可能不是您想要的,但我们可以通过非常简单的更改显着减少操作次数.

Integer[] one = {1,3}

int[] one = {1,4} 
int[] two = {1,3}

这将使该过程加速少量,但不是通过优化排序/搜索逻辑本身.我们所做的就是删除自动装箱和自动拆箱操作.但是,如果你这么大规模地这样做,那么这可以产生实质性的差异.

原文地址:https://www.jb51.cc/java/121770.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐