给定两个数组,编写一个函数来计算它们的交集。
示例 1:
输入: nums1 = [1,2,2,1], nums2 = [2,2]
输出: [2]
示例 2:
输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出: [9,4]
说明:
输出结果中的每个元素一定是唯一的。
我们可以不考虑输出结果的顺序。
using System;
using System.Collections.Generic;
namespace _349.InterSection
{
class Program
{
static void Main(string[] args)
{
int[] num1 = new int[] { 1,2,2,1};
int[] num2 = new int[] { 2,2};
int[] numList = IntersectionTwo(num1,num2);
foreach(var n in numList)
{
Console.WriteLine(n);
}
Console.ReadKey();
}
//方法一
static int[] Intersection(int[] nums1, int[] nums2)
{
int len1 = nums1.Length;
int len2 = nums2.Length;
int i = 0;
int j = 0;
Array.Sort(nums1);
Array.Sort(nums2);
List<int> numsList = new List<int>();
while (i < len1 && j < len2)
{
if (nums1[i] > nums2[j])
{
j++;
}
else if ((nums1[i]) < nums2[j])
{
i++;
}
else
{
if (!numsList.Contains(nums1[i]))
{
numsList.Add(nums1[i]);
}
i++;
j++;
}
}
int[] num = new int[numsList.Count];
int k = 0;
foreach (var n in numsList)
{
num[k] = n;
k++;
}
return num;
}
方法二
static int[] IntersectionTwo(int[] nums1, int[] nums2)
{
List<int> set1 = new List<int>();
List<int> set2 = new List<int>();
foreach (int num in nums1)
{
set1.Add(num);
}
foreach (int num in nums2)
{
if (set1.Contains(num))
{
if (!set2.Contains(num))
{
set2.Add(num);
}
}
}
int[] ret = new int[set2.Count];
int i = 0;
foreach (int num in set2)
{
ret[i++] = num;
}
return ret;
}
}
}