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

问题描述 投票:0回答:1

我有三个长度为9的字符串数组,我想看看它们是否都包含相同的名称。我必须在对数时间O(NlogN)中执行此操作。我的计划是对两个数组进行排序,然后使用binarysearch查找相似的名称。我的代码就像这样的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;
        }}}}

我只想打印出发现的第一个一式三份,这就是为什么我会中断。此代码示例不起作用,我无法弄清楚如何进一步实现此想法。因此,我在这里寻求您的帮助以完成此任务。

java arrays string algorithm binary-search
1个回答
1
投票

像这样更改条件部分:

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

以捕捉两个搜索都表示find的情况。

© www.soinside.com 2019 - 2024. All rights reserved.