有两个数量不定的String数组,怎样可以找出其中两边都有的元素

leonpard 2005-06-02 02:18:24
比如
String[] a={"abc","def","111","define"};
string[] b={"ooo","define","abc","技术问题","中国"};

数组a,b是动态计算出来的,数量并非如上面那样是固定的。
怎样用一个比较好的算法找出其中a,b中都有的"def","define"?
...全文
272 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jihanzhong 2005-06-25
  • 打赏
  • 举报
回复
用hashmap或者hashtable
njwangchuan 2005-06-24
  • 打赏
  • 举报
回复
老兄,你只要调用现成的方法就可以了,何必问其内部是怎么实现的呢?刚好今天才考数据结构,就着余兴不妨YY一通算法:
1、二重循环的时间复杂度是o(n^2)
2、我假定每个数组内部无重复元素
(1)将两个数组和成一个数组,时间复杂o(n)
(2) 对新数组实现基数排序,时间复杂o(d(n+radix));d为最大字符串长度,radix为所有字符串 中出现的字符种类数目。
(3)统计新数组中重复元素的个数
这个算法虽然不是最优秀,但时间复杂度也控制在o(n)了,如何?
3、再给一算法,分别对两个数组做基数排序,再利用归并排序算法的思想比较出重复元素



这些东西估计只有我这样的学生才会用到,呵呵
ianok 2005-06-22
  • 打赏
  • 举报
回复
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 21
at test.TestPoJo.main(TestPoJo.java:39)
dlxu 2005-06-22
  • 打赏
  • 举报
回复
用Collection Framework自带的方法肯定快
zawx 2005-06-22
  • 打赏
  • 举报
回复
gtlang78的方法很快,效率比用双循环快了不知道多少倍.
leonpard 2005-06-02
  • 打赏
  • 举报
回复
gtlang78 的方法就很简洁,已经运行正确,但不知道效率有没有两个for循环高。

各位高手还有没有其他方案?
gtlang78 2005-06-02
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class CollectioinTest
{
public static void main(String[] args)
{
String[] a={"abc","def","111","define"};
String[] b={"ooo","define","abc","技术问题","中国"};

List shared = new ArrayList(Arrays.asList(a));
shared.retainAll(Arrays.asList(b));
System.out.println(shared);
}
}
密码测试 2005-06-02
  • 打赏
  • 举报
回复
靠,楼主你牛。找到好方法通知一下。
密码测试 2005-06-02
  • 打赏
  • 举报
回复
import java.util.ArrayList;
import java.util.List;

public class test {

public static void main(String[] args) {
String[] a = {"abc","def","111","define"};
String[] b = {"ooo","define","abc","技术问题","中国"};
List list = new ArrayList();
for (int i = 0; i < a.length; i++) {
for (int j0 = 0; j0 < b.length; j0++) {
if(b[j0].compareTo(a[i]) == 0) {
list.add(b[j0]);
}
}
}
}
}
leonpard 2005-06-02
  • 打赏
  • 举报
回复
除了做两个循环有没有其他思路???我就是不希望使用这种办法。
bbstrees 2005-06-02
  • 打赏
  • 举报
回复
做一个循环
String s="";
for(int i=0;i<a.length;i++){
for(int j=0;j<b.length;j++){
if(a[i].equals(b[j]))
s=s+a[i];
break;
}
}
大概写了点,思路是对你,你自己调调
LEINIAOVSDULONG 2005-06-02
  • 打赏
  • 举报
回复
这么简单的算法都想不出来!!! 咳~~~愁阿
LEINIAOVSDULONG 2005-06-02
  • 打赏
  • 举报
回复
又是一道作业题!!!!

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧