我一直在尝试使用Java的二分搜索方法在单词数组(一个词典)中搜索一个特定的字符串,然后确定该字符串是单词、前缀还是不是单词。如果返回的索引大于或等于零,则字符串为单词。如果返回的索引小于零,那么我必须确定它不是一个单词,还是一个前缀。
public LexStatus wordStatus(String s) {
String [] myWordsArray = new String[myWords.size()];
myWords.toArray(myWordsArray);
int wordIndex= Arrays.binarySearch(myWordsArray,s);
if(wordIndex>=0){
return LexStatus.WORD;
}
else{
int checkIndex = (wordIndex*-1)+1;
if(checkIndex<=myWords.size()-1){
String precedingWord= myWords.get(checkIndex);
String check1=precedingWord.toLowerCase();
String check2= s.toLowerCase();
if(check1.startsWith(check2)){
return LexStatus.PREFIX;
}
return LexStatus.NOT_WORD;
}
return LexStatus.NOT_WORD;
}
}
计算checkindex
不正确。
从binarysearch
的文档中,您知道wordindex=(-(插入点)-1)
。因此wordindex+1=-(insertion point)
,所以翻转符号upi后,得到-(wordindex+1)=insertion point
int checkIndex = -(wordIndex+1);
您的代码以相反的顺序执行否定和加法,因此您的代码检查了一个错误的单词。
注意:您在checkindex
中看到的词是按词典顺序排在s
后面的词,而不是前面的词。因此,您应该将precingword
变量重命名为nextword
。
null 请记住,我是一个非常早期,初学者,婴儿程序员和DIY课,我正在学习的糟糕的解释东西。所以请简单明了。谢谢你。
主要内容:src/runoob/binary/BinarySearch.java 文件代码:一、概念及其介绍 二分搜索树(英语:Binary Search Tree),也称为 二叉查找树 、二叉搜索树 、有序二叉树或排序二叉树。满足以下几个条件: 若它的左子树不为空,左子树上所有节点的值都小于它的根节点。 若它的右子树不为空,右子树上所有的节点的值都大于它的根节点。 它的左、右子树也都是二分搜索树。 如下图所示: 二、适用说明 二分搜索树有着高效的插入、删除、查询操作。 平均时间的时间复
代码是一个简单的二分搜索程序。我试着追踪程序,但它只会让我更加困惑。我不明白为什么嵌套的if has data,min,midpoint-1,&target和底部的else if语句has data,midpoint+1,max,target。
我被要求对数组进行排序和搜索。数组的排序很简单,我的代码有效,但是每当我尝试调用二叉搜索方法时,它都适用于数组中的第一个元素,但结果给了我“-1” 我的完整代码如下:
一、顺序性 二分搜索树可以当做查找表的一种实现。 我们使用二分搜索树的目的是通过查找 key 马上得到 value。minimum、maximum、successor(后继)、predecessor(前驱)、floor(地板)、ceil(天花板、rank(排名第几的元素)、select(排名第n的元素是谁)这些都是二分搜索树顺序性的表现。 二、局限性 二分搜索树在时间性能上是具有局限性的。 如下图
我需要在数组上使用二进制搜索来找到它们的索引。我能够做到这一点,但是我现在需要使用数组类型为Integer而不是int的对象。 这里有一个问题:“为binarySearch方法提供代码,记住它接收的参数是Object type Object,如果其中任何一个用于调用compareTo方法,则必须首先将其强制转换为可比或原始对象类型。”