public class Solution { public int[] Intersect(int[] nums1, int[] nums2) { var len1 = nums1.Length; var len2 = nums2.Length; var list = new List<int>();//用于存放最后的结果 var dic1 = new Dictionary<int, int>();//记录第一个数组的特征 var dic2 = new Dictionary<int, int>();//记录第二个数组的特征 for (int i = 0; i < len1; i++) { if (!dic1.ContainsKey(nums1[i])) { dic1.Add(nums1[i], 1); } else { dic1[nums1[i]]++; } } for (int i = 0; i < len2; i++) { if (!dic2.ContainsKey(nums2[i])) { dic2.Add(nums2[i], 1); } else { dic2[nums2[i]]++; } } if (dic1.Count <= dic2.Count) { //以dic1为基础循环 foreach (var d in dic1) { if (dic2.ContainsKey(d.Key)) { var count = Math.Min(d.Value, dic2[d.Key]); while (count > 0) { list.Add(d.Key); count--; } } } } else { //以dic2为基础循环 foreach (var d in dic2) { if (dic1.ContainsKey(d.Key)) { var count = Math.Min(d.Value, dic1[d.Key]); while (count > 0) { list.Add(d.Key); count--; } } } } foreach (var l in list) { Console.WriteLine(l); } return list.ToArray(); } }
https://leetcode.com/problems/intersection-of-two-arrays-ii/#/description
补充一个python的实现:
1 class Solution: 2 def intersect(self, nums1: 'List[int]', nums2: 'List[int]') -> 'List[int]': 3 result = [] 4 c1 = collections.Counter(nums1) 5 c2 = collections.Counter(nums2) 6 for k in c1.keys(): 7 if k in c2: 8 times = min(c1[k],c2[k]) 9 result += [k] * times 10 return result