C#字典的键值对遍历:foreach (KeyValuePair<int, int> kvp in dic)
1. 题目描述
2. 题目分析
- 给你两个数组,让你求两个数组的交集【输出结果是唯一的】
- 首先,对于数组num1进行
Dictionary
遍历,不存在dic.Add(nums1[i], 1);
,存在dic[nums1[i]] = 1;
- 继而,对于数组num2进行
Dictionary
遍历,dic[nums2[i]]++:将重复的标记为2
dic.ContainsKey(nums2[i]) && dic[nums2[i]] == 1:主要防止有重复的,干扰数组cnt的定义大小
- 最后,遍历<key,value>
foreach (KeyValuePair<int, int> kvp in dic)
,找出value的key,返回cnt
3. 题目代码
public class Solution {
public int[] Intersection(int[] nums1, int[] nums2) {
if(nums1 == null && nums2 == null)
{
return new int[0];
}
Dictionary<int, int> dic = new Dictionary<int, int>();
for (int i = 0; i < nums1.Length; i++)
{
if (dic.ContainsKey(nums1[i]))
{
dic[nums1[i]] = 1;
}
else
{
dic.Add(nums1[i], 1);
}
}
int num = 0;
for (int i = 0; i < nums2.Length; i++)
{
if (dic.ContainsKey(nums2[i]) && dic[nums2[i]] == 1)
{
dic[nums2[i]]++;
num++;
}
}
int[] cnt = new int[num];
num = 0;
foreach (KeyValuePair<int, int> kvp in dic)
{
if (kvp.Value >= 2)
{
cnt[num++] = kvp.Key;
}
}
return cnt;
}
}