leecode 解题总结:349. Intersection of Two Arrays
2017-03-01 22:17
519 查看
#include <iostream> #include <stdio.h> #include <vector> #include <string> #include <unordered_set> using namespace std; /* 问题: Given two arrays, write a function to compute their intersection. Example: Given nums1 = [1, 2, 2, 1], nums2 = [2, 2], return [2]. Note: Each element in the result must be unique. The result can be in any order. 分析:给定两个数组,计算连个数组的交集,交集中的每个元素必须是唯一的。 结果可以是任何顺序。 关键就是判断两个区间如何才会相交,距离 [beg1 , end1],[beg2 , end2] 1】当 end1 >= beg2: 1.1】 end1 >= end2,交集为[max(beg1 , beg2) , end2] 1.2] end1 < end2:交集为[beg2 , end1] 2】当 end2 >= beg1: 2.1】 end2 >= end1,交集为[max(beg1, beg2) , end1] 2.2】 end2 < end1, 交集为[beg1 , end2] 输入: 4(第一个数组的元素个数) 2(第二个数组的元素个数) 1 2 2 1 2 2 输出: 2 题目是求两个数组中元素的交集,不是区间。弄错题意。 关键: 1 所谓交集,就是同时在两个数组中都出现的,不妨用两个哈希map 分别统计两个数组,然后遍历其中一个哈希map,判断该map中的元素 如果在另一个map中也出现,则将其存储至结果集 总的时间复杂度O(n) 2 哈希set初始化可以直接传入vector unordered_set<int> m(nums1.begin(), nums1.end()); */ class Solution { public: vector<int> intersection(vector<int>& nums1, vector<int>& nums2) { vector<int> result; if(nums1.empty() || nums2.empty()) { return result; } unordered_set<int> times1; int size1 = nums1.size(); for(int i = 0 ; i < size1 ; i++) { times1.insert(nums1.at(i)); } unordered_set<int> times2; int size2 = nums2.size(); for(int i = 0 ; i < size2 ; i++) { times2.insert(nums2.at(i)); } //用较小的map作为主map进行遍历 for(unordered_set<int>::iterator it = times1.begin() ; it != times1.end() ; it++) { if(times2.find(*it) != times2.end()) { result.push_back(*it); } } return result; } }; void print(vector<int>& result) { if(result.empty()) { cout << "no result" << endl; return; } int size = result.size(); for(int i = 0 ; i < size ; i++) { cout << result.at(i) << " " ; } cout << endl; } void process() { vector<int> nums; vector<int> nums2; int value; int num; int num2; Solution solution; vector<int> result; while(cin >> num >> num2) { nums.clear(); for(int i = 0 ; i < num ; i++) { cin >> value; nums.push_back(value); } nums2.clear(); for(int i = 0 ; i < num2 ; i++) { cin >> value; nums2.push_back(value); } result = solution.intersection(nums , nums2); print(result); } } int main(int argc , char* argv[]) { process(); getchar(); return 0; }
相关文章推荐
- leecode 解题总结:29 Divide Two Integers
- leecode 解题总结:160. Intersection of Two Linked Lists
- leecode 解题总结:383. Ransom Note
- leecode 解题总结:345. Reverse Vowels of a String
- leecode 解题总结:350. Intersection of Two Arrays II
- leecode 解题总结:232. Implement Queue using Stacks
- leecode 解题总结:238. Product of Array Except Self
- leecode 解题总结:260. Single Number III
- leecode 解题总结:304. Range Sum Query 2D - Immutable
- leecode 解题总结:179. Largest Number
- leecode 解题总结:201. Bitwise AND of Numbers Range
- leecode 解题总结:206. Reverse Linked List
- leecode 解题总结:208. Implement Trie (Prefix Tree)
- leecode 解题总结:79. Word Search
- leecode 解题总结:84. Largest Rectangle in Histogram
- leecode 解题总结:102. Binary Tree Level Order Traversal
- leecode 解题总结:124. Binary Tree Maximum Path Sum
- leecode 解题总结:127. Word Ladder
- leecode 解题总结:141. Linked List Cycle
- leecode 解题总结:147. Insertion Sort List