黑马程序员技术交流社区

标题: 高效查询两个数组和list中相同元素 [打印本页]

作者: 黎健东    时间: 2013-3-8 13:27
标题: 高效查询两个数组和list中相同元素
数组a:aa,bb,cc,dd,ee
数组b:aa,ff,gg,cc

用最小次数查询出两个数组相同的元素。


如果换成list,又是怎么样的
list a:aa,bb,cc,dd,ee
list b:aa,ff,gg,cc


作者: 陈圳    时间: 2013-3-8 13:49
  1. class Test3
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String[] a1={"aa","bb","cc","dd","ee"};
  6.                 String[] a2={"aa","ff","gg","cc"};
  7.                 System.out.println(getStr(a1,a2));//输出aa,cc
  8.         }
  9.         public static String getBuf(ArrayList<String> a1,ArrayList<String> a2)//都是一个想法,就是先把其中一个转换成一个字符串,
  10.         //如果用方法查找,实现最小比较次数得到相同元素
  11.         {
  12.                 String s="";
  13.                 String str="";
  14.                 for(Iterator<String> in=a1.iterator();in.hasNext();)
  15.                         s+=in.next();
  16.                 for(String s1:a2)
  17.                 {
  18.                         if(s.contains(s1))
  19.                                 str+=s1+" ";
  20.                 }
  21.                 return str;
  22.         }
  23.         public static String getStr(String[] a1,String[] a2)//字符串
  24.         {
  25.                 String s=Arrays.toString(a1);
  26.                 String s2="";
  27.                 for(String s1:a2)
  28.                 {
  29.                         if(s.contains(s1))//这个只需要判断字符数组的长度,就可以得到结果
  30.                         s2+=s1+" ";
  31.                 }
  32.                 return s2;
  33.         }
  34. }
复制代码
这算么?
作者: 黎健东    时间: 2013-3-8 14:34
陈圳 发表于 2013-3-8 13:49
这算么?

哈哈,还不错哈,谢谢
对了,再请教一下
4/9;
我想得到一个精确2位小数,该怎么写,好久没写忘了
作者: 陈圳    时间: 2013-3-8 14:36
黎健东 发表于 2013-3-8 14:34
哈哈,还不错哈,谢谢
对了,再请教一下
4/9;

public static double method_8(double d1,int n)
        {
                double d2=d1-(int)d1;//取d1的小数位
                int num=1;
                for(int i=0;i<n;i++)
                        num*=10;
                d2=(int)(d2*num);//保留num位数
                d1=(int)d1;//将d1取整
                d1=d1+d2/num;//加上d1的小数位
                return d1;
        }
这是以前写的保留浮点型数据的任意位数的方法.你参考下.
作者: 克零岚    时间: 2013-3-8 15:13
两个数组问题,我的代码用到了HashSet集合;关于List类型的也可以,看完这个,List类型的你也能写出来了
  1. public class Contain {
  2.    static String  a [] = {"aa","bb","cc","dd","ee"};
  3.    static String  b [] = {"aa","ff","gg","cc"};
  4.    static void Contain ()
  5.    {
  6.    HashSet<String> aa = new HashSet<String>();
  7.        for(int i=0;i<a.length;i++){
  8.          aa.add(a[i]);  
  9.          }
  10.        for(int i=0;i<b.length;i++){
  11.         if(aa.contains(b[i])){
  12.             System.out.println(b[i]);  
  13.             }
  14.         }
  15.    }
  16. public static void main(String[] args) {
  17.         Contain();
  18. }
  19. }
复制代码

作者: 黑马_位志国    时间: 2013-3-8 15:34
黎健东 发表于 2013-3-8 14:34
哈哈,还不错哈,谢谢
对了,再请教一下
4/9;

import java.text.DecimalFormat;
/**
*  【获取小数点后两位数】
* @author Administrator
*
*/
public class Test {
        public static void main(String[] args) {
                DecimalFormat digits = new DecimalFormat("0.00");
                System.out.println(digits.format((double)4/9));
        }
}

作者: 冯祖焱    时间: 2013-3-8 16:15
我提供一种ACM程序设计竞赛中常用的方案:
1、先把两个数组/集合排序,可使用快速排序,时间复杂度为 nLog(n)
2、拿数组1中的元素使用二分查找在数组2中查找,时间复杂度为 log(n)

ps:数据量较大的时候使用,数据量小就没必要这样折腾了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2