设为首页收藏本站

八达网

 找回密码
 注册
查看: 397|回复: 23
打印 上一主题 下一主题

论坛有人懂java吗?不用JAVA自带的api如何算两个arrays的union

[复制链接]

2

主题

0

好友

6万

积分

仲裁者

A-CUP 才是王道!

2007年度八达十大杰出青年 2008年度八达十大水友 2009年度八达十大水友

跳转到指定楼层
1
发表于 2010-11-6 09:43 |只看该作者 |倒序浏览
int[] a = ( 1, 2, 3, 4 }
int[] b = ( 1, 2, 3, 5 }

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

不能用java自带的api

上八达,日熊逼!

2

主题

0

好友

6万

积分

仲裁者

A-CUP 才是王道!

2007年度八达十大杰出青年 2008年度八达十大水友 2009年度八达十大水友

2
发表于 2010-11-6 09:50 |只看该作者
真的很郁闷啊,感兴趣的朋友可以加我QQ 70871210 一起研究科学

上八达,日熊逼!
回复

使用道具 举报

376

主题

8

好友

7万

积分

仲裁者

DON'T PANIC

3
发表于 2010-11-6 10:04 |只看该作者
没看明白你要说的
回复

使用道具 举报

1

主题

0

好友

3万

积分

大和

bb

4
发表于 2010-11-6 10:27 |只看该作者
sb , 先排序
回复

使用道具 举报

357

主题

22

好友

3万

积分

大和

人生如戏,全靠演技。

5
发表于 2010-11-6 10:30 |只看该作者
讨论jave?啥都不懂得菜鸟能学习吗?
回复

使用道具 举报

0

主题

0

好友

5567

积分

飞龙

6
发表于 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]);
                }
回复

使用道具 举报

10

主题

1

好友

6367

积分

大象

一个穷逼

7
发表于 2010-11-6 11:08 |只看该作者
可以先拿个中间array存放a,然后中间array和b比较,中间array没有的就放进去;如果能用上些排序的算法,程序会优化很多
如果在最好的青春都不去做,大抵以后也不会有机会去做了
回复

使用道具 举报

2

主题

0

好友

6万

积分

仲裁者

A-CUP 才是王道!

2007年度八达十大杰出青年 2008年度八达十大水友 2009年度八达十大水友

8
发表于 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

高手啊,我再研究研究,完了答复你

上八达,日熊逼!
回复

使用道具 举报

2

主题

0

好友

6万

积分

仲裁者

A-CUP 才是王道!

2007年度八达十大杰出青年 2008年度八达十大水友 2009年度八达十大水友

9
发表于 2010-11-6 18:56 |只看该作者
可以先拿个中间array存放a,然后中间array和b比较,中间array没有的就放进去;如果能用上些排序的算法,程序会优化很多
woailiya 发表于 2010-11-6 05:08

加我QQ啊

上八达,日熊逼!
回复

使用道具 举报

2

主题

0

好友

3万

积分

大和

10
发表于 2010-11-6 19:14 |只看该作者
估计10行代码就搞定了
该行了
回复

使用道具 举报

2

主题

0

好友

3万

积分

大和

11
发表于 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);
                }
        }

}
该行了
回复

使用道具 举报

0

主题

0

好友

3万

积分

大和

12
发表于 2010-11-6 19:46 |只看该作者
最笨的方法,遍历a中的元素,和b的每个元素做比较就可以了啊。
222222
回复

使用道具 举报

2

主题

0

好友

6万

积分

仲裁者

A-CUP 才是王道!

2007年度八达十大杰出青年 2008年度八达十大水友 2009年度八达十大水友

13
发表于 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 }

上八达,日熊逼!
回复

使用道具 举报

2

主题

0

好友

6万

积分

仲裁者

A-CUP 才是王道!

2007年度八达十大杰出青年 2008年度八达十大水友 2009年度八达十大水友

14
发表于 2010-11-6 22:49 |只看该作者
具体方法是添加的时候查看这个数字是否有了

我用了recursive binary search

http://baike.baidu.com/view/1963755.htm

上八达,日熊逼!
回复

使用道具 举报

1

主题

0

好友

3万

积分

大和

bb

15
发表于 2010-11-6 22:53 |只看该作者
哈哈哈, 两个已经排好序的根本不需要啊
回复

使用道具 举报

2

主题

0

好友

6万

积分

仲裁者

A-CUP 才是王道!

2007年度八达十大杰出青年 2008年度八达十大水友 2009年度八达十大水友

16
发表于 2010-11-6 22:57 |只看该作者
哈哈哈, 两个已经排好序的根本不需要啊
nttstar 发表于 2010-11-6 16:53

如果没拍呢

上八达,日熊逼!
回复

使用道具 举报

0

主题

0

好友

1万

积分

航母

17
发表于 2010-11-6 23:00 |只看该作者
直接扔到hashmap里面再取出来…
回复

使用道具 举报

1

主题

0

好友

3万

积分

大和

bb

18
发表于 2010-11-6 23:38 |只看该作者
如果没拍呢
琴瑟琵琶 发表于 2010-11-6 22:57

先排序,不需要二分查找
回复

使用道具 举报

15

主题

0

好友

1万

积分

航母

19
发表于 2010-11-7 00:48 |只看该作者
直接扔到hashmap里面再取出来…
eleavor 发表于 2010-11-6 23:00



^_^.. 这个方法不错的..前提是数字跨度不是很大
回复

使用道具 举报

3

主题

0

好友

3万

积分

大和

20
发表于 2010-11-7 10:54 |只看该作者
确实,如果能用二分查找显然是已经排序的了。。。
回复

使用道具 举报

3

主题

0

好友

3万

积分

大和

21
发表于 2010-11-7 11:00 |只看该作者
本帖最后由 gazzterran 于 2010-11-7 11:04 编辑

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

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

不过从感觉上来说这个方法应该常数时间小点
回复

使用道具 举报

2

主题

0

好友

6万

积分

仲裁者

A-CUP 才是王道!

2007年度八达十大杰出青年 2008年度八达十大水友 2009年度八达十大水友

22
发表于 2010-11-7 21:17 |只看该作者
汗。。。理解错了,楼主的意思应该是类似于合并的结果是排序二叉树。。。而不是说待合并的array

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

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

行家。。。。膜拜

上八达,日熊逼!
回复

使用道具 举报

912

主题

3

好友

2万

积分

大和

2011年度八达十大水友

23
发表于 2010-11-7 21:28 |只看该作者
参考数据结构的 合并两个已经排序数组 O(2n)的复杂度,每次加入最小的一个或两个
最小的。。
回复

使用道具 举报

13

主题

0

好友

1万

积分

航母

24
发表于 2010-11-7 22:01 |只看该作者
HashMap c
c <-- a
c <--b
我们走得太快,灵魂都跟不上了……
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

手机版|Archiver|八达网    

GMT+8, 2026-1-31 17:22

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部