标签:
题目:给几个Email的list,输出全部list的交集(在全部list中都出现过的email)。
思路:用set记录前i个list中都含有的email,当进行第i+1时,检查每个email是否在该set中存在,若存在,则说明该email在前i+1个list中都有,则将它记录到另一个set中。整个算法运行过程中,我们可以滚动地利用这两个set。
时间复杂度O(n)。n是全部list中出现的email个数。
1 vector<string> EmailList(vector<vector<string> >& email) 2 { 3 vector<string> res; 4 if (email.size() == 0) return res; 5 unordered_set<string> dict[2]; 6 for (int i = 0, n = email.size(); i < n; i++) 7 { 8 dict[i % 2].clear(); 9 for (int j = 0, len = email[i].size(); j < len; j++) 10 { 11 if (!i || dict[(i + 1) % 2].count(email[i][j])) 12 dict[i % 2].insert(email[i][j]); 13 } 14 } 15 for (auto i : dict[(email.size() - 1) % 2]) 16 res.push_back(i); 17 return res; 18 }
标签:
原文地址:http://www.cnblogs.com/fenshen371/p/5170604.html