集合合并

1.集合合并: 给定一个字符串的集合,格式如: {aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh} 要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应 输出 {aaa bbb ccc ddd hhh},{eee fff}, {ggg} 
(1)请描述你解决这个问题的思路; 
(2)请给出主要的处理流程,算法,以及算法的复杂度 
(3)请描述可能的改进(改进的方向如效果,性能等等,这是一个开放问题)。

2.集合合并,同时去掉重复的元素,并进行排序

import java.util.ArrayList;     

import java.util.Arrays;     

import java.util.HashSet;     

import java.util.Iterator;     

import java.util.Set;

public class Test1{
		public static void main(String[] args){
			int[] arr1={4,7,5,1,4};
			int[] arr2={9,3,7,8,0,7,4};

			//set集合是不允许重复的,所以将数组的值放入set集合值,hashSet采用的是散列存储,所以没有顺序
			Set<Integer> set=new HashSet<Integer>();
			for (int i=0;i<arr1.length;i++) {
				set.add(arr1[i]);
			}
			for (int j=0;j<arr2.length;j++) {
				set.add(arr2[j]);
			}
			//得到的是不重复的值,Set的长度
			int num=set.size();
			System.out.println(num);

			int num2=0;
			Iterator it=set.iterator();
			int[] arrays=new int[num];
			while(it.hasNext()){
				int a=(Integer)it.next();
				arrays[num2]=a;
				num2=num2+1;
			}
			//对集合进行排序,并取出
			Arrays.sort(arrays);
			for(int k=0;k<arrays.length;k++){
				System.out.print(arrays[k]);
			}

		}
}

  

时间: 2024-12-05 12:14:51

集合合并的相关文章

【转载】多个集合合并成没有交集的集合-实现

原博文地址http://www.cnblogs.com/ttltry-air/archive/2012/08/14/2638437.html 1.问题描述 将多个集合合并成没有交集的集合. 给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}. (1)请描述你解决这个

并查集(集合合并) + 缩点

正解是dfs的一道题目被我以为成了并查集,结果坑了队友.现在分析一下自己当时为什么会想成是并查集呢. 题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2588 题意:告诉一张n点m边的图,求哪些边是桥.其实就是缩点,然而却大脑短路,直接认定是并查集了,现在的我真的不能理解当时的自己.... 当时想的是把所有的环缩成一个点,然后剩下的边就是桥了,缩点,第一时间想的就是并查集,其实并查集的操作一般有三个: 1.初始化 把

6041 I Curse Myself(点双联通加集合合并求前K大) 2017多校第一场

题意: 给出一个仙人掌图,然后求他的前K小生成树. 思路: 先给出官方题解 由于图是一个仙人掌,所以显然对于图上的每一个环都需要从环上取出一条边删掉.所以问题就变为有 M 个集合,每个集合里面都有一堆数字,要从每个集合中选择一个恰好一个数加起来.求所有的这样的和中,前 K 大的是哪些.这就是一个经典问题了. 点双联通就不说了 都一眼能看出来做法就是缩点之后每个环每次取一个,然后找最大的k个所以这道题的难点就在这里,做法当然是不知道啦,看了题解和博客才懂的.以前做过两个集合合并的,这个是k个合并,

多个集合合并成没有交集的集合

问题描述                                                                                      将多个集合合并成没有交集的集合. 给定一个字符串的集合,格式如:{aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh}要求将其中交集不为空的集合合并,要求合并完成后的集合之间无交集,例如上例应输出{aaa bbb ccc ddd hhh},{eee fff}, {ggg}.

hdu 1412 {A} + {B}(集合合并)

{A} + {B} Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11944    Accepted Submission(s): 5000 Problem Description 给你两个集合,要求{A} + {B}. 注:同一个集合中不会有两个相同的元素. Input 每组输入数据分为三行,第一行有两个数字n,m(0<n,m<

将排序序列的集合合并成一个排序序列

您有一个排序序列的集合,并且想要遍历所有合并在一起的排序序列. 先看如下示例,了解实际需求: >>> import heapq >>> a = [1, 4, 7, 10] >>> b = [2, 5, 6, 11] >>> for c in heapq.merge(a, b): print(c) ... 1 2 4 5 6 7 10 11 值得注意的是,heapq.merge要求所有的输入序列已排序.特别是,它不会首先将所有数据读入堆

DataSet之将连个DataSet集合合并成一个DataSet集合

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Configuration; using System.Data; using System.Data.SqlClient; namespace qqIsonline { public parti

非递减有序集合合并

描述 巳知线性表LA和线性表LB中的数据元素按值非递减有序排列,现要求将LA和LB归并为一个新的线性表LC,且LC中的元素仍按值非递减有序排列. 输入三行,第一行A,B集合的个数n,m第二行:集合A的数据:第三行:集合B的数据.输出二行,第一行,集合C的个数k第二行:集合C的数据.样例输入 11 12 2 4 6 7 8 9 12 34 56 78 89 3 5 7 9 12 34 56 98 234 456 789 1234 样例输出 18 2 3 4 5 6 7 8 9 12 34 56 7

CodeForces 566D 并查集集合合并

1 #include <stdio.h> 2 #include <algorithm> 3 #define MAX 100000 4 #define LL long long 5 #define unsigned U 6 //using namespace std; 7 int cas=1,T; 8 int fa[MAX*2+10],next[MAX*2+10],n,q; 9 void init(int n) 10 { 11 for(int i=1;i<=n;i++) { f