我在写一个程序,你可以输入一个单词,它将被存储在一个数组列表中。然后,您可以通过在文本字段中输入这些词并按下按钮来搜索这些词。(如果按下另一个按钮,也可以对它们进行排序)。如果找到了这个词,就应该打印出这个词在ArrayList中的位置,如果找不到,就应该打印出来。直到最近我测试它的时候,我一直认为这是可行的(以前也是可行的):我输入了一个我知道在ArrayList中的单词,这样它就可以打印出这个单词在ArrayList中的位置(这就是我想让它做的)。然后输入一个我知道在ArrayList中不存在的单词,这使得它打印出该单词不存在(这也是我希望它做的)。但当我在那之后搜索ArrayList中存在的一个词时,它打印出来的结果是找不到这个词。然后我用ArrayList中存在的另一个单词尝试了这个方法,但我也找不到。之后我又重新启动了几次程序,有时能用,有时不行,我不知道为什么或者为什么不能...
在我运行算法之前,数组会被排序,所以我知道这不是问题所在...
下面是使用我的搜索算法的类:
public class SearchAlg {
public static String binary (ArrayList<String> list, String user) {
int first = 0;
int found = 0;
int middle = 0;
int last = list.size();
String strFound = "";
while (first < last && found == 0) {
middle = ((first + last) / 2);
if (user.compareTo(list.get(middle)) > 0) {
first = middle + 1;
} else if (user.compareTo(list.get(middle)) == 0) {
found = 1;
} else if (user.compareTo(list.get(middle)) < 0) {
last = middle - 1;
}
}
if (found == 1) {
strFound = "The word " + user + " exists on the place " + middle + " in the Arraylist";
} else {
strFound = "The word " + user + " does not exist in the Arraylist";
}
return strFound;
}
}
这里是我的排序算法:public class Sort{static private String strtemp;static private int i;static private int n;
public static ArrayList bubbelSort (ArrayList<String> list) {
for (i = 0; i < list.size(); i++) {
for (n = 0; n < list.size() - i - 1; n++) {
if (list.get(n).compareTo(list.get(n + 1)) > 0) {
strTemp = list.get(n);
list.set(n, list.get(n + 1));
list.set(n + 1, strTemp);
}
}
}
return list;
}
这是我的main
类:
ArrayList<String> list = new ArrayList();
private void btnEnterActionPerformed(java.awt.event.ActionEvent evt) {
txtaOutput.setText("");
String wrd = txtfEnter.getText();
list.add(wrd);
for (int i = 0; i < list.size(); i++) {
txtaOutput.append(list.get(i) + "\n");
}
}
private void btnSortActionPerformed(java.awt.event.ActionEvent evt) {
txtaOutput.setText("");
Sort.bubbelSort(list);
}
private void btnSearchActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String user = txtfSearch.getText();
txtaOutput.setText("");
String bin = SearchAlg.binary(list, user);
txtaOutput.append(bin);
}
编辑:我现在知道问题是ArrayList中的第一个项目是不可搜索的。因此,如果ArrayList由A、b、C
组成,那么只有b
和C
是可搜索的。如果我尝试搜索A
,它会说找不到。
int first= 0;
int last= a.length - 1;
while (first<= last) {
int middle = first+ (last- first) / 2;
if (user.compareTo(list.get(middle)) < 0) last = middle - 1;
else if (user.compareTo(list.get(middle)) > 0) first= middle + 1;
else {
found =1 ;
break;
}
}
别忘了按前一篇文章中提到的对列表进行排序
本文向大家介绍算法题,trim二叉搜索树相关面试题,主要包含被问及算法题,trim二叉搜索树时的应答技巧和注意事项,需要的朋友参考一下 参考回答: C++版本
我在看麻省理工学院的开放课件的第一次讲座,关于算法的介绍,有一些东西对我来说并不是很明显。你不能在这里观看24:30的讲座和课堂讲稿,这里有一维峰值问题的定义和解决方案的所有细节 问题是: 对于由“n”个整数元素组成的数组,找到一个峰值 我的问题/担心 既然在中有上述条件,为什么要往左走?而不是右边? 既然在中有上述条件,为什么要往右边走?而不是左边? 二进制搜索算法假设我们从排序的数组开始,那么
下面是我的代码:
这是理解分而治之算法的练习题。 给你一个N个排序整数的数组。所有元素都是不同的,除了一个元素重复两次。设计一个O(log N)算法来找到那个元素。 我得到这个数组需要被划分,看看下一个索引中是否找到了一个相等的对应项,我相信这是二进制搜索的一种变体。但我找不到任何解决方案或指导。
你将如何解决这个问题? 你从一个盒子开始,盒子里有x个红色大理石,y个绿色大理石和z个蓝色大理石,盒子外还有无限量的红色、绿色和蓝色大理石。一个步骤是选择两种不同的颜色,从盒子中取出两个大理石(两种颜色各一个),然后从你的供应中向盒子中添加第三种颜色的大理石。例如,如果你选择红色和绿色,那么你移除一个红色和一个绿色的大理石,然后放回一个蓝色的。对于什么样的起始条件(表示为x、y、z上的约束),通过
我有一个二进制搜索树,它的每个节点都有两个值。 所以它的节点是这样的。 我已经根据节点的“name”变量的升序在BST中插入了值。所以树的顺序遍历将按“name”的升序返回节点。 现在我想根据“值”变量的升序显示树节点。无需更改原始树。哪种算法/方法对此最有效?