八达网

标题: 论坛有人懂java吗?不用JAVA自带的api如何算两个arrays的union [打印本页]

作者: 琴瑟琵琶    时间: 2010-11-6 09:43
标题: 论坛有人懂java吗?不用JAVA自带的api如何算两个arrays的union
int[] a = ( 1, 2, 3, 4 }
int[] b = ( 1, 2, 3, 5 }

如何算出 int[] c = ( 1, 2, 3, 4, 5 }

不能用java自带的api
作者: 琴瑟琵琶    时间: 2010-11-6 09:50
真的很郁闷啊,感兴趣的朋友可以加我QQ 70871210 一起研究科学
作者: 国妓米兰    时间: 2010-11-6 10:04
没看明白你要说的
作者: nttstar    时间: 2010-11-6 10:27
sb , 先排序
作者: Z_shaPT    时间: 2010-11-6 10:30
讨论jave?啥都不懂得菜鸟能学习吗?
作者: zqpjzs    时间: 2010-11-6 10:33
int[] a = { 1, 2, 3, 4 };
                int[] b = { 1, 2, 3, 5 };
                int[] temp = new int[a.length+b.length];
                for(int i=0;i<temp.length;i++){
                        if(i<a.length)
                                temp[i]=a[i];
                        else
                                temp[i]=b[i-a.length];
                }
                int size = 0;
                for(int i=0;i<temp.length;i++){
                        int n = temp[i];
                        if(n!=Integer.MIN_VALUE){
                                size++;
                                for(int j=i+1;j<temp.length;j++){
                                        if(temp[j]==n)
                                                temp[j]=Integer.MIN_VALUE;
                                }
                                       
                        }
                }
                int[] c = new int[size];
                int inx =0;
                for(int i=0;i<temp.length;i++){
                        if(temp[i]!=Integer.MIN_VALUE){
                                c[inx++]=temp[i];
                        }
                }
                for(int i=0;i<c.length;i++){
                        System.out.println(c[i]);
                }
作者: woailiya    时间: 2010-11-6 11:08
可以先拿个中间array存放a,然后中间array和b比较,中间array没有的就放进去;如果能用上些排序的算法,程序会优化很多
作者: 琴瑟琵琶    时间: 2010-11-6 18:33
int[] a = { 1, 2, 3, 4 };
                int[] b = { 1, 2, 3, 5 };
                int[] temp = new int[a.length+b.length];
                for(int i=0;i
zqpjzs 发表于 2010-11-6 04:33

高手啊,我再研究研究,完了答复你
作者: 琴瑟琵琶    时间: 2010-11-6 18:56
可以先拿个中间array存放a,然后中间array和b比较,中间array没有的就放进去;如果能用上些排序的算法,程序会优化很多
woailiya 发表于 2010-11-6 05:08

加我QQ啊
作者: gaoshouzizhong    时间: 2010-11-6 19:14
估计10行代码就搞定了
作者: gaoshouzizhong    时间: 2010-11-6 19:28
import java.util.ArrayList;
public class Test {
        public static void main(String[] args) {
                int[] a = { 1, 2, 3, 4, 8 };
                int[] b = { 1, 2, 3, 5 };
                ArrayList<Integer> c = new ArrayList<Integer>();
                for (int i = 0; i < a.length; i++) {
                        c.add(a[i]);
                }
                for (int i = 0; i < b.length; i++) {
                        if (c.indexOf(b[i]) < 0) {
                                c.add(b[i]);
                        }
                }
                int[] result = new int[c.size()];
                for (int i = 0; i < c.size(); i++) {
                        result[i] = c.get(i);
                }
        }

}
作者: lihuizmm    时间: 2010-11-6 19:46
最笨的方法,遍历a中的元素,和b的每个元素做比较就可以了啊。
作者: 琴瑟琵琶    时间: 2010-11-6 22:43
import java.util.ArrayList;
public class Test {
        public static void main(String[] args) {
                int[] a = { 1, 2, 3, 4, 8 };
                int[] b = { 1, 2, 3, 5 };
                ArrayList c = new ArrayList();
                for (int i ...
gaoshouzizhong 发表于 2010-11-6 13:28

你这种sb都会啊,用的ArrayList api嘛,那么简单
说了不能用java的api

ps.  我做出来了,用的自己的api

效果如下

public class SetTheoryShowCase {
       
        public static void main(String[] args) {
       
        SetTheory a, b, c;
        a = new SetTheory();
        b = new SetTheory();
       
        a.lisaa(1);
        a.lisaa(2);
        a.lisaa(3);
        a.lisaa(4);
        a.lisaa(5);
        b.lisaa(1);
        b.lisaa(2);
        b.lisaa(3);
        b.lisaa(6);
       
        c = JoukkoOp.yhdiste(a, b);
        System.out.println("a = " + a);
        System.out.println("b = " + b);
        System.out.println("c = " + c);
        System.out.println();
       
        c = JoukkoOp.leikkaus(a, b);
        System.out.println("a = " + a);
        System.out.println("b = " + b);
        System.out.println("c = " + c);
        System.out.println();
       
        c = JoukkoOp.erotus(a, b);
        System.out.println("a = " + a);
        System.out.println("b = " + b);
        System.out.println("c = " + c);
        System.out.println();

========================


a = { 1 2 3 4 5 }
b = { 1 2 3 6 }
c = { 1 2 3 4 5 6 }

a = { 1 2 3 4 5 }
b = { 1 2 3 6 }
c = { 1 2 3 }

a = { 1 2 3 4 5 }
b = { 1 2 3 6 }
c = { 4 5 }
作者: 琴瑟琵琶    时间: 2010-11-6 22:49
具体方法是添加的时候查看这个数字是否有了

我用了recursive binary search

http://baike.baidu.com/view/1963755.htm
作者: nttstar    时间: 2010-11-6 22:53
哈哈哈, 两个已经排好序的根本不需要啊
作者: 琴瑟琵琶    时间: 2010-11-6 22:57
哈哈哈, 两个已经排好序的根本不需要啊
nttstar 发表于 2010-11-6 16:53

如果没拍呢
作者: eleavor    时间: 2010-11-6 23:00
直接扔到hashmap里面再取出来…
作者: nttstar    时间: 2010-11-6 23:38
如果没拍呢
琴瑟琵琶 发表于 2010-11-6 22:57

先排序,不需要二分查找
作者: ProcessAlgebra    时间: 2010-11-7 00:48
直接扔到hashmap里面再取出来…
eleavor 发表于 2010-11-6 23:00



^_^.. 这个方法不错的..前提是数字跨度不是很大
作者: gazzterran    时间: 2010-11-7 10:54
确实,如果能用二分查找显然是已经排序的了。。。
作者: gazzterran    时间: 2010-11-7 11:00
本帖最后由 gazzterran 于 2010-11-7 11:04 编辑

汗。。。理解错了,楼主的意思应该是类似于合并的结果是排序二叉树。。。而不是说待合并的array

这方法不错,提到n*logn 了,和nttstar那个排序后再归并是一个量级

不过从感觉上来说这个方法应该常数时间小点
作者: 琴瑟琵琶    时间: 2010-11-7 21:17
汗。。。理解错了,楼主的意思应该是类似于合并的结果是排序二叉树。。。而不是说待合并的array

这方法不错,提到n*logn 了,和nttstar那个排序后再归并是一个量级

不过从感觉上来说这个方法应该常数时间小点
gazzterran 发表于 2010-11-7 05:00

行家。。。。膜拜
作者: lvan    时间: 2010-11-7 21:28
参考数据结构的 合并两个已经排序数组 O(2n)的复杂度,每次加入最小的一个或两个
最小的。。
作者: iloveMotel168    时间: 2010-11-7 22:01
HashMap c
c <-- a
c <--b




欢迎光临 八达网 (https://www.8-da.com/) Powered by Discuz! X2.5