Java 比较三个字符串数组并使用 Binarysearch

标签 java arrays string algorithm binary-search

我有三个长度为 9 的字符串数组,我想看看它们是否都包含相同的名称。我必须在线性时间 O(NlogN) 内完成此操作。我的计划是对两个数组进行排序,然后使用二进制搜索来查找相似的名称。我的代码就像这样的atm:

import edu.princeton.cs.algs4.*;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;

public class Triplicate2_2_21 {

  // arrays.binarysearh
  public static void main(String[] args) {
    //Strengir sem innihalda 9 nöfn. Sumir innihalda sama nafnið.
    //Nöfn sem eru eins í öllum 3 listunum eru Hulda og Ingi.
    String[] name1 = {"Helgi", "Arnar", "Hulda", "Hrefna", "Ingi", "Marta",
                    "Svavar", "Ester", "Valur"};
    String[] name2 = {"Oddur", "Birgitta", "Hulda", "Ingi", "Selma", "Svavar",
                    "Sylvia", "Unnar", "Hrefna"};
    String[] name3 = {"Elfa", "Jan", "Hulda", "Hrund", "Ingi", "Marta",
                    "Angela", "Sturla", "Valur"};

    Arrays.sort(name2);
    Arrays.sort(name3);

    for(int i = 0; i < name1.length; i++) {
        if((Arrays.binarySearch(name2,name1[i])).compareTo(Arrays.binarySearch(name3,name1[i])) < 0 ) {
          StdOut.println(name1[i]);
          break;
        }}}}

我只想打印出我找到的第一个三份副本,这就是我打破的原因。这个代码示例不起作用,我不知道如何进一步实现这个想法。因此,我来​​这里寻求您的帮助来完成这件事。

P.s.这是一个作业,问题来自《算法导论》第四版,听起来像这样:

“一式三份。给定三个列表,每个列表有 N 个名称,设计一个线性算法 确定是否存在所有三个列表共有的名称,如果有,则返回第一个”。

最佳答案

Arrays.binarySearch 确实返回一个 int,因此没有 compareTo 方法。您的代码无法编译。

要修复它,请更改条件部分,如下所示:

if (Arrays.binarySearch(name2, name1[i]) > -1 && Arrays.binarySearch(name3, name1[i]) > -1) {
                System.out.println(name1[i]);
                break;
            }
        }

当两个搜索都发出找到信号时捕获这种情况。

关于Java 比较三个字符串数组并使用 Binarysearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60078785/

相关文章:

java - 在 Android 中更改 Switch 的颜色

java - 我如何获得剩余的 session 时间?

java - 数组变量的错误

javascript - 无法在 JavaScript 中访问 JSON 数组的值

Python:获取从日期字符串开始的年数

java - 试图获取 ENTER 键的字符代码

c++ - 为什么这个c++程序可以编译?

java - 如何用不同的字符串替换字符串中的特定字符?

java - 在java中搜索单词内的字符串

java - 使用带有 Maven 插件的 Eclipse,我应该如何设置我的构建以便将其部署到 tomcat?