java - Java比较三个字符串数组并使用Binarysearch
问题描述
我有三个长度为 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;
}}}}
我只想打印出我找到的第一个一式三份,这就是我打破的原因。这个代码示例不起作用,我无法弄清楚如何进一步实现这个想法。所以,我在这里寻求你的帮助来完成这个。
Ps 这是一个家庭作业,问题来自《算法导论》,第 4 版,听起来像这样:
“一式三份。给定三个列表,每个列表有 N 个名称,设计一个线性算法来确定所有三个列表是否有任何共同的名称,如果有,则返回第一个”。
解决方案
Arrays.binarySearch
确实返回一个int,因此没有compareTo
方法。您的代码无法编译。
要修复它,请像这样更改条件部分:
if (Arrays.binarySearch(name2, name1[i]) > -1 && Arrays.binarySearch(name3, name1[i]) > -1) {
System.out.println(name1[i]);
break;
}
}
捕获两个搜索都发出信号 a 的情况find
。
推荐阅读
- spring-boot - EnableFeignClients 使 Spring 无法加载上下文
- sql - SQL 复制错误:“在订阅者处未找到该行”但指向另一个发布的表
- c# - 为什么属性网格没有显示正确的颜色?
- sql-server - SSIS 包问题 - 更新要上传的每日 Excel 文件会导致 SSIS 包变得“不同步”
- java - 在自由上使用带有 jndi 的 spring 时无法获取 JDBC 连接
- rpm - 升级时不应删除的 RPM 目录
- go - 在分块数据的 HTTP 响应中如何设置 Content-Length
- azure-functions - 在 Azure Durable Function Activity 中使用 Task.Delay
- android - 在 Android 9.0 中创建进入主屏幕的快捷方式
- firebase - Firestore,如何合并包含多个范围比较的查询的索引?