java集合的交集,并集,差集到底什么时候求交集什么时候求并集

集合运算(并集、交集、余集)
  给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
  第一行为一个整数n,表示集合A中的元素个数。
  第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
  第三行为一个整数m,表示集合B中的元素个数。
  第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
  集合中的所有元素均为int范围内的整数,n、m&=1000。
  第一行按从小到大的顺序输出A、B交集中的所有元素。
  第二行按从小到大的顺序输出A、B并集中的所有元素。
  第三行按从小到大的顺序输出B在A中的余集中的所有元素。
2 4 6 8 10
1 2 3 4 5 6 8 10
样例输出1 2 3 4 5 6 7
1 2 3 4#include&iostream&
#include&string&
#include&algorithm&
int main()
for(int i=0;i&n;i++)
cin&&a[i];
for(int i=0;i&m;i++)
cin&&b[i];
int bingji[n+m],jiaoji[n+m],yuji[n+m];
int x=0,y=0;
memcpy(bingji,a,sizeof(a));
for(int i=0;i&m;i++)
int count=0;
for(int j=0;j&n;j++)
if(b[i]!=a[j])
if(count==n)
bingji[n+(x++)]=b[i];
jiaoji[y++]=b[i];
for(int i=0;i&n;i++)
int count=0;
for(int j=0;j&m;j++)
if(a[i]!=b[j])
if(count==m)
yuji[z++]=a[i];
sort(bingji,bingji+n+x);
sort(jiaoji,jiaoji+y);
sort(yuji,yuji+z);
for(int i=0;i&y;i++)
cout&&jiaoji[i]&&" ";
for(int i=0;i&n+x;i++)
cout&&bingji[i]&&" ";
for(int i=0;i&z;i++)
cout&&yuji[i]&&" ";
C++集合操作之集合并集:std::set_union
C++集合运算函数总结-merge、set_union、set_difference、set_symmetric_difference、set_intersection
C++抽象编程——STL实战(4)——计算集合的交集,并集及区别
没有更多推荐了,java集合(交集,并集,差集)
说明:这里没有求差集的代码,有了交集和并集,差集=并集-交集
Java代码& 收藏代码
&&& import
java.util.ArrayL &
&&& import
java.util.HashS &
&&& import
java.util.L &
&&& import
java.util.S &
&&& public class
ListTest { &
public static void main(String[] args) { &
&&&&&&&&&&&&
testIntersection(); &
&&&&&&&&&&&&
testUnion(); &
&&&&&&&&&&&&
testIntersectionSet(); &
private static void testIntersection() { &
&&&&&&&&&&&&
List list1 = new ArrayList(); &
&&&&&&&&&&&&
List list2 = new ArrayList(); &
&&&&&&&&&&&&
list1.add("abc");& list2.add("abc");
&&&&&&&&&&&&
list1.add("123");& list2.add("123");
&&&&&&&&&&&&
list1.add("ABC"); &
&&&&&&&&&&&&
list2.add("XYZ"); &
&&&&&&&&&&&&
list1.removeAll(list2); &
&&&&&&&&&&&&
list1.addAll(list2); &
&&&&&&&&&&&&
System.out.println("并集元素个数是:" +
list1.size());&&&&&&
private static void testIntersectionSet() {
&&&&&&&&&&&&
List list1 = new ArrayList(); &
&&&&&&&&&&&&
List list2 = new ArrayList(); &
&&&&&&&&&&&&
list1.add("abc");& list2.add("abc");
&&&&&&&&&&&&
list1.add("123");& list2.add("123");
&&&&&&&&&&&&
list1.add("ABC"); &
&&&&&&&&&&&&
list2.add("XYZ"); &
&&&&&&&&&&&&
Set set =new HashSet(); &
&&&&&&&&&&&&
addList2Set(set, list1); &
&&&&&&&&&&&&
addList2Set(set, list2); &
&&&&&&&&&&&&
System.out.println("并集元素个数是:" +
set.size());&&&&&&
private static void testUnion() { &
&&&&&&&&&&&&
List list1 = new ArrayList(); &
&&&&&&&&&&&&
List list2 = new ArrayList(); &
&&&&&&&&&&&&
list1.add("abc");& list2.add("abc");
&&&&&&&&&&&&
list1.add("123");& list2.add("123");
&&&&&&&&&&&&
list1.add("ABC"); &
&&&&&&&&&&&&
list2.add("XYZ"); &
&&&&&&&&&&&&
list1.retainAll(list2); &
&&&&&&&&&&&&
System.out.println("交集元素个数是:"+list1.size());
private static void addList2Set(Set set,List list){
&&&&&&&&&&&
for (String str : list) { &
&&&&&&&&&&&&&&&
set.add(str); &
&&&&&&&&&&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。三个集合的并集公式_中华文本库
多个集合并集中元素计算公式 - 多个集合并集中元素计算公式 (容斥定理的应用 组合数学的内容 card(A∪B)=card(A)+card(B)-card(A∩B) card(A∪B∪C)=...
《1.1.3集合的基本运算(并集与交集)》PPT课件 - 交集与并集 观察集合A,B,C元素间的关系: A={4,5,6,8}, B={3,5,7,8}, C={3,4,5,6,7,8} ...
集合的运算 交集并集 补集 - 第一章 集合 1.3 集合的运算 高教社 复习知识 揭示课题 1 交集和并集的概念是什么?(含义和符号 ) 2 集合交运算和并运算各自...
1.1.3集合的运算—并集与交集 “三四五”高效课堂教学设计_高一数学_数学_高中教育_教育专区。“三四五”高效课堂教学设计: (授课日期: 年月日 星期 拟 授课...
集合的运算(交集、并集) - (1)集合的运算 交集、并集) 集合的运算( 1.3 (1)集合的运算(交集、并集) 上海市松江一中 潘勇 一、教学内容分析 教学内容分析 ...
补集以及全集的概念 3、结合图形使学生理解交集并集的概念性质 重点:集合、子集、补集和全集的概念 难点:交集并集的概念,符号之间的区别与联系 教学目标 重点、难点...
集合的并集运算 - 高一 第一章第一节 集合的并集与运算... §1.1.3 集合的并集运算 我们设集合A为高一(2)班全体女生,有35 人;设集合B为高一(2)班全体男生...
集合的并集运算 - §1.1.3 集合的并集运算 我们设集合A为高一(2)班全体女生,有35 人;设集合B为高一(2)班全体男生,有30人; 设集合C为我们高一(2)班全体...
{ 1,2, 3,6} 的正约数集A 的正约数集 8的正约数集 ={ 1,2,4,8 }...3、两个集合的并集中元素个数公式: 、两个集合的并集中元素个数公式: ? ...用顺序表求集合的交集、并集和差集
  使用顺序表时, 需要定义一个数组来存储顺序表中的所有元素和定义一个整型变量来存储顺序表的长度。假定数组用data[MaxSize]表示,长度整型变量用length表示,并采用结构体类型表示,元素类型采用通用类型标识符ElemType,则顺序表的存储结构定义如下:  
#define MaxSize 50
typedef int ElemT
typedef struct{
ElemType data[MaxSize];
1) 用顺序表,求集合A与B交集
  思路:求C=A?B, C中元素是A、B中的公共元素。扫描A中的元素A.data[i],若它与B中某个元素相同,表示是交集元素,将其放到C中,算法如下:
void Intersection(SqList *&A,SqList *&B,SqList *&C){
int i,j,k=0;
for (i=0;i&A-&i++)
while(j&B-&length && B-&data[j]!=A-&data[i])
if (j&B-&length) //表示A-&data[i]在B中,将其放到C中
C-&data[k++]=A-&data[i];
C-&length=k;
2) 用顺序表,求集合A与B的并集
  思路:求C=A?B中元素为A和B中非重复出现的所有元素。现将A复制到C中,然后扫描B中的元素B.data[i], 若它与A中所有元素均不相同,表示是并集元素,将其放到C中。算法如下:  
void Union(SqList *&A,SqList *&B,SqList *&C){
int i,j,k=0;
for(i=0;i& A-&i++)
C-&data[i]=A-&data[i];
C-&length=A-&
for (i=0;i& B-&i++)
while(j& A-&length && B-&data[i] != A-&data[j])
if(j==A-&length)
C-&data[C-&length+k++] = B-&data[i];
C-&length += //修改集合长度
3) 用顺序表,求集合A与B之间的差集
思路:求C=A-B, C中元素为A中所有不属于B的元素, 然后扫描A中的元素A.data[i], 若它与B中所有元素均不相同,表示是差集元素,将其放到C中。算法如下:
void Different(SqList *&A, SqList *&B,SqList *&C){
int i,j,k=0;
for (i=0;i&A-&i++)
while(j& B-&length && B-&data[j] != A-&data[i])
if(j==B-&length)
//表示A-&data[i]不在B中,将其放到C中
C-&data[k++]=A-&data[i];
C-&length=k; //修改集合长度
完整代码如下:
//ShunBase.h
#include &stdio.h&
#include &malloc.h&
#define MaxSize 50
typedef int ElemType;
typedef struct{
ElemType data[MaxSize];
void InitList(SqList *&L){
L=(SqList*)malloc(sizeof(SqList));
L-&length=0;
void DestroyList(SqList *L){
int ListEmpty(SqList *L){
return (L-&length==0);
int ListLength(SqList *L){
return (L-&length);
void DispList(SqList *L){
if(ListEmpty(L))
for(i=0;i&L-&i++)
printf("%d ",L-&data[i]);
printf("\n");
int GetElem(SqList *L,int i,ElemType &e){
if(i&1 || i&L-&length)
e=L-&data[i-1];
int LocateElem(SqList *L,ElemType e){
while (i&L-&length && L-&data[i]!=e) i++;
if(i&=L-&length)
return i+1;
int ListInsert(SqList *&L,int i,ElemType e){
if(i&1 || i&L-&length+1)
for(j=L-&j&i;j
L-&data[j]=L-&data[j-1];
L-&data[i]=e;
//在i处插入元素e
L-&length++;
//顺序表长度加1
int ListDelete(SqList *&L,int i,ElemType &e){
if(i&1 || i&L-&length)
e=L-&data[i];
for(j=i;j&L-&length-1;j++)
L-&data[j]=L-&data[j+1];
//主函数.cpp
#include "ShunBase.h"
#include &stdio.h&
void Intersection(SqList *&A,SqList *&B,SqList *&C){
int i,j,k=0;
for (i=0;i&A-&i++)
while(j& B-&length && B-&data[j]!=A-&data[i])
if (j& B-&length) //表示A-&data[i]在B中,将其放到C中
C-&data[k++]=A-&data[i];
C-&length=k;
void Union(SqList *&A,SqList *&B,SqList *&C){
int i,j,k=0;
for(i=0;i& A-&i++)
C-&data[i]=A-&data[i];
C-&length=A-&
for (i=0;i& B-&i++)
while(j& A-&length && B-&data[i] != A-&data[j])
if(j==A-&length)
C-&data[C-&length+k++] = B-&data[i];
C-&length += //修改集合长度
void Different(SqList *&A, SqList *&B,SqList *&C){
int i,j,k=0;
for (i=0;i&A-&i++)
while(j& B-&length && B-&data[j] != A-&data[i])
if(j==B-&length)
//表示A-&data[i]不在B中,将其放到C中
C-&data[k++]=A-&data[i];
C-&length=k; //修改集合长度
void main()
//printf("1+2=3\n");
SqList *Ls = (SqList *)malloc(sizeof(SqList));
Ls-&length=0;
//printf("%d\n",Ls-&length);
//插入元素
for (i=0;i&10;i++)
ListInsert(Ls,i,i);
DispList(Ls);
//获取第一个元素
GetElem(Ls,1,e);
printf("\n%d\n",e);
//获取第三个元素
GetElem(Ls,3,e);
printf("%d\n",e);
//在第3个元素之后,插入15
ListInsert(Ls,3,15);
DispList(Ls);
SqList *A = (SqList*)malloc(sizeof(SqList));
A-&length=0;
A-&data[0]=2;
A-&data[1]=5;
A-&data[2]=10;
A-&data[3]=7;
A-&data[4]=16;
A-&length=5;
SqList *B = (SqList*)malloc(sizeof(SqList));
B-&data[0]=3;
B-&data[1]=5;
B-&data[2]=7;
B-&length=3;
SqList *C = (SqList*)malloc(sizeof(SqList));
C-&length=0;
DispList(A);
DispList(B);
//1) C=A∩B
//Intersection(A,B,C);
//2) C=A∪B
Union(A,B,C);
//3) C=A-B
//Different(A,B,C);
DispList(C);
效果如下:
图(1) 交集C=A?B
图(2) 并集C=A?B
图(3) 差集C=A-B
图示操作如下:
图(4) C=A?B
图(5) C=A?B
图(6) C=A-B
C 顺序表求交集和并集
输入两个闭区间,求其交集,并集和差集(C++):
数据结构实践——顺序表:两集合的交集
C/C++ 第三周线性表项目(2)
求集合并集
利用线性表的顺序结构求集合的并、交、差、补(C语言实现)
求两个有序链表的交集和差集
【C】两个有序链表序列的交集
【算法】求区间并集的长度
C语言数据结构之求两个集合的交集(链表)
顺序表中两个集合的并集
没有更多推荐了,每个人都善于学习。学习是人类的本性
一个日期时间段有交集求并集的问题
同学工作中遇到的,问题大概是:输入一系列时间段(开始日期start,结束日期end)返回结果为:时间段若有交集则取其并集,无交集则返回原时间段,如输入:160110;
则返回:160110;
在这里我将输入的格式定为60120格式代表开始和结束日期,并将其封装到Single对象中,对single对象初排序sort;然后再取并集,代码如下:
import java.io.BufferedR
import java.io.IOE
import java.io.InputStreamR
import java.util.C
import java.util.LinkedL
import java.util.List;
public class Merge {
public static void main(String[] args) throws IOException{
List&Single& list = new LinkedList&Single&();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
while(input != null && ! input.equals("stop")){
list.add(new Single(new String[]{input.substring(0, input.indexOf(",")),input.substring(input.indexOf(",")+1)}));
input = br.readLine();
merge(list);
br.close();
public static void merge(List&Single& list){
Collections.sort(list, new Comparator());
for(int i =0; i&list.size()-1; i++){
for(int j =i+1; j&list.size(); j++){
outer = list.get(i);
inner = list.get(j);
String start = outer.
String end = outer.
String start2 = inner.
String end2 = inner.
if(end.compareTo(start2)&=0 && end.compareTo(end2)&=0){
outer.end = end2;
list.set(i, outer);
list.remove(j);
else if(end.compareTo(end2)&=0 || start.compareTo(end2)==0){
list.remove(j);
for(Single single : list)
System.out.println(single);
class Single {
public Single(String[] str){
start = str[0];
end = str[1];
public String toString(){
return start +"," +
class Comparator implements java.util.Comparator&Single& {
public int compare(Single o1, Single o2) {
return o1.start.compareTo(o2.start)&0? 1:-1;
判断两个时间区间是否存在交集-Java实现
算法 数学区间求并集
如何获取两个时间段中重合的部分
判断两个时间段,是否交集 java
获取两个时间段的交集区间
Java判断两个时间段是否有交集
Java求多个集合的交集和并集
一个 MYSQL 并集 的问题
JAVA 交集,差集,并集
没有更多推荐了,

我要回帖

更多关于 集合交集并集符号 的文章

 

随机推荐