两个数组并集 交集 差集的算法思想与实现
2013-11-03 00:04
239 查看
算法概述:
两个任意元素的数组,比较出两个数组中相同的元素和不同的元素。
元素划分:
计算过程中,两个数组内部元素的划分:
算法流程:
从数组1的尚未比较的元素中拿出第一个元素array1(i),用array1(i)与array2(j)进行比较(其中j>i且j<array2的长度),可能出现下面两种情况,
1. 数组2中找到了一个与array1(i)相等的元素,则将array2(j)与array2(i)进行交换,i加一,进行下次迭代
2. 数组2直到结尾也没找到与array1(i)相等的元素,则将array1(i)与尚未进行比较元素块的最后一个元素array1(k)进行交换,i不加一,进行下次迭代。
两个任意元素的数组,比较出两个数组中相同的元素和不同的元素。
元素划分:
计算过程中,两个数组内部元素的划分:
算法流程:
从数组1的尚未比较的元素中拿出第一个元素array1(i),用array1(i)与array2(j)进行比较(其中j>i且j<array2的长度),可能出现下面两种情况,
1. 数组2中找到了一个与array1(i)相等的元素,则将array2(j)与array2(i)进行交换,i加一,进行下次迭代
2. 数组2直到结尾也没找到与array1(i)相等的元素,则将array1(i)与尚未进行比较元素块的最后一个元素array1(k)进行交换,i不加一,进行下次迭代。
#include <iostream> using namespace std; //A-B: [A[end]~A[nA]) //B-A: [B[end]~B[nB]) //A&&B: A[0]~A[end-1] 或者(B[0]~B[end-1]) //返回值end为交集与差集的分界线的索引位置。 size_t SetOperating( int A[], size_t nA,int B[],size_t nB) { size_t end = nA; bool bFind = false; for (size_t i = 0;i < end;) { bFind = false; size_t j = i; for ( ;j < nB; ++j) { if(B[j] == A[i]) { int val = B[j]; B[j] = B[i]; B[i] = val; bFind = true; break; } } if (bFind == false) { if (j == nB) { int val = A[end-1]; A[end-1] = A[i]; A[i] = val; --end; } } else ++i; } return end; } int main() { int aa[] = {7,1,3,2,6,2,8,9}; int bb[] = {10,1,2,3,6,2,9}; SetOperating(aa,sizeof(aa)/4,bb,sizeof(bb)/4); }
相关文章推荐
- Linux CentOS Mysql修改默认端口
- OCP-1Z0-053-V12.02-46题
- 排序算法之堆和堆排序
- 传统社区的评论结构和百度贴吧的层级回复结构,大家觉得各有什么有缺点呢?
- oracle监听配置讲解
- jquery slibings选取同级其他元素
- 【MFC基础教程】小宝手把手带你去做自己的计算器
- (ios7) 解决代码布局View, ios7 中 subView 高度增加StatusBar20dp的问题,保证Ios6,ios7代码一致
- duilib进阶教程 -- 改进List控件 (16)
- Tutorial----分布式聊天服务器
- 编译代码报出Android library projects cannot be launched错误的解决
- poj 2385
- 编译代码报出Android library projects cannot be launched错误的解决
- 使用正则限制input框只能输入数字/英文/中文等等
- C#获取当前页面的URL示例代码
- 通过C#动态生成图书信息XML文件
- C#操作Excel数据增删改查示例
- 在PHP上显示JFreechart画的统计图方法
- div模拟选择框示例代码
- JavaScript中使用Substring删除字符串最后一个字符