今天是2019/1/30我重新刷到这题:10分钟通过
HashSet<int> set = new HashSet<int>();
for (int i = 0; i < nums1.Length; i++)
{
if (!set.Contains(nums1[i]))
{
set.Add(nums1[i]);
}
}
HashSet<int> save = new HashSet<int>();
for (int i = 0; i < nums2.Length; i++)
{
if (set.Contains(nums2[i]))
{
save.Add(nums2[i]);
}
}
return save.ToArray();
本题请参考:https://blog.csdn.net/us2019/article/details/85043322
可以忽略以下代码:
思路:在一个循环里查找一一对应的数值是否相等,如果相等,存到一个现有的集合,并记录数量,返回相应数量即可。
static void Main(string[] args)
{
int[] a = new int[] { 1, 2, 2, 1 };
int[] b = new int[] { 3, 2, 2 };
int [] res = GetJJ(a,b);
for (int i = 0; i < res.Length; i++)
{
Console.Write(res[i]);
}
Console.ReadKey();
}
#region 349. 两个数组的交集
private static int[] GetJJ(int[] a, int[] b)
{
int pp=0;//记录个数
var ts = a.Length > b.Length ? b.Length : a.Length; //获取短的数组进行下面的循环。
for (int i = 0, j = 0; i < ts; i++,j++)
{
if (a[i] == b[j])
{
a[0] = a[i]; //选A还是选b被赋值都没关系,因为他们的长度都满足。如果能选到最少的更好
pp++;
}
}
int[] pps = new int[pp];
for (int i = 0; i < pp; i++)
{
pps[i] = a[i];
}
return pps;
}
#endregion
总结:
1、第一次在自己需求中写 ?: 这样结构的程序。相信以后再使用的时候可以轻车熟路
2、熟练了不定义新的数组,去赋值旧的数组(优化方法)