【问题标题】:How efficiently to check if two arrays are similar?检查两个数组是否相似的效率如何?
【发布时间】:2021-10-02 17:05:23
【问题描述】:

您最多只能交换任一数组中的一对元素。

我的代码正在运行,但我不知道如何让我的代码更快。我需要它在 3 秒内执行。

boolean checkSimilarArray(int[] a, int[] b) {
    int sml = 0;
    boolean result = false;
    for (int i = 0; i<a.length; i++){
        if (a[i]!= b[i]){
            sml++;
        }
    }
    Arrays.sort(a);
    Arrays.sort(b);
    if(Arrays.equals(a,b)){
        if (sml <= 2){
            result = true;
        }else{
            result = false;
        }
    }
    return result;
}

预期的输入和输出图像

【问题讨论】:

  • 相似的标准是什么?你能提供预期的输入和输出吗?
  • 我相信 OP 意味着两个相似的数组,如果一个可以通过交换任一数组中的最多一对元素从另一个数组中获得。

标签: java arrays performance


【解决方案1】:

在你的代码中,昂贵的部分是排序,所以你应该不用它来解决它。

一个数组,除了一对交换之外,其他所有位置都相同(我们称它们为d1d2),并且位置将满足a[d1] == b[d2] &amp;&amp; a[d2] == b[d1]

在代码中:

int d1 = -1;
int d2 = -1;
for (int i = 0; i < a.length; i++) {
  if (a[i] != b[i]) {
    if (d1 == -1) {
      d1 = i;
    } else if (d2 == -1) {
      d2 = i;
    } else {
      return false; // too many differences
    }
  }
}
return d1 == -1 || (d2 != -1 && a[d1] == b[d2] && a[d2] == b[d1]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多