求两个集合的交集
来源:互联网 发布:星际淘宝网起点 编辑:程序博客网 时间:2024/04/30 12:09
求2个集合的交集
第一种方法
最简单、粗暴的循环遍历2个集合,判断如果有相同的元素就取出来。假设集合1的长度为M,集合2的长度为N,那么,时间复杂度为:O(M*N)
代码:
public static List<string> GetIntersection(List<string> list1, List<string> list2){ List<string> list3 = new List<string>(); //第一种方法:循环遍历 //O(n×m) for (int i = 0; i < list1.Count; i++) { for (int j = 0; j < list2.Count; j++) { if (list1[i]==list2[j]) { list3.Add(list1[i]); } } } return list3;}
第二种方法
利用hash这种很有用的数据结构来实现。我们知道,hash的特点之一就是不允许有重复元素,即hash表中的元素都是唯一的。所以,我们的思路就是:先把第一个集合的所有元素都放进hashSet中,时间复杂度O(M);再把第二个集合中的元素放进hashSet中,如果有重复元素,就是这2个集合的交集,时间复杂度为O(N)。即总的时间复杂度从O(M*N)降低到了O(M+N)。
代码:
public static List<string> GetIntersection2(List<string> list1, List<string> list2){ //第二种方法:hash List<string> list3 = new List<string>(); HashSet<string> hashSet = new HashSet<string>(); foreach (string item in list1) { hashSet.Add(item); } foreach (string item in list2) { if (hashSet.Add(item) == false) { list3.Add(item); } } return list3;}
测试
代码:
static void Main(string[] args){ List<string> list1 = new List<string>(); list1.Add("apple"); list1.Add("banana"); list1.Add("pear"); list1.Add("orange"); list1.Add("grape"); List<string> list2 = new List<string>(); list2.Add("nokia"); list2.Add("sumsung"); list2.Add("htc"); list2.Add("apple"); list2.Add("orange"); List<string> list =new List<string>(); //test for two set join //list = TwoSetsIntersection.GetIntersection(list1, list2); list = TwoSetsIntersection.GetIntersection2(list1, list2); foreach (string item in list) { Console.Write(item + "\t"); }}
总结
hash的另一个特点是查找效率为O(1),惊人的高!
对于这道题目要是算出来O(M*N)的同学就应该补课了。出来混,迟早要还的。
0 0
- 求两个集合的交集
- 求两个集合的交集
- 求两个集合的交集
- 求两个集合交集的方法比较
- intersect--求两个集合的交集
- 编程题:给定两个集合,求两个集合的交集
- 求集合的交集
- 以单链表存储的两个集合求交集的算法
- 基本归并算法(求两个集合的交集)
- java求两个集合的交集和并集
- 经典面试题,求两个集合的交集
- java求两个集合的交集和并集
- matlab:求两个集合的 交集 和 并集
- setxor--求两个集合交集的非(异或)
- 求两个集合的交集、差集和并集
- SDUT 离散题目4 求两个集合的交集
- SDUT 离散题目4 求两个集合的交集
- C++ 求两个集合的交集和并集
- Linux C 书籍推荐
- Android中dip、dp、sp、pt和px的区别
- WinCE下BSP中的Dirs文件和Sources文件
- uva---232--- Crossword Answers
- CSS样式应用积累
- 求两个集合的交集
- BUG现象与对应0001文件打开没关闭
- jquery-easyui中datagrid扩展,隐藏显示表头功能
- wpa_cli调试工具的使用
- sql 字段截取匹配的方法
- 抽屉效果功能实现
- 7,嵌入式Linux之系统时钟和UART实验
- 让IE支持HTML5
- IOS——获取当前运营商(获取漫游接入网络的运营商)