LC 两个数组的交集 II
Posted yangbocsu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LC 两个数组的交集 II相关的知识,希望对你有一定的参考价值。
LC 两个数组的交集 II
给定两个数组,编写一个函数来计算它们的交集。
说明:
- 输出结果中每个元素出现的次数,应与元素在两个数组中出现次数的最小值一致。
- 我们可以不考虑输出结果的顺序。
【代码1.0】
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
int cnt= 0; //交集元素个数计数
for (int i = 0; i < nums1.length; i++)
{
for (int j = 0; j < nums2.length; j++) {
if (nums1[i] == nums2[j])
{
nums1[cnt++] = nums2[j];
nums2[j] = -1; //将重复的用-1填充
break;
}
}
}
return Arrays.copyOf(nums1,cnt);
}
}
【代码1.1】
class Solution {
public int[] intersect(int[] nums1, int[] nums2) {
// 0 先排序
Arrays.sort(nums1);
Arrays.sort(nums2);
int cnt= 0;
int head1 = 0;
int head2 = 0;
while (head1 < nums1.length && head2 < nums2.length)
{
if (nums1[head1] < nums2[head2])
{
//两个指针指向的值不同,指向的值相对小的移一步,相对大不动
head1++;
}
else if (nums1[head1] > nums2[head2])
{
head2++;
}
else //nums1[head1] = nums2[head2]
{
nums1[cnt++] = nums2[head2];
head1++;
head2++;
}
}
return Arrays.copyOf(nums1,cnt);
}
}
针对一次性数组而言:
就本题而言暂时不用开辟新的存储容器,顺便用传进来的数组进行存储;
进阶:
- 如果给定的数组已经排好序呢?你将如何优化你的算法?
- 如果 nums1 的大小比 nums2 小很多,哪种方法更优?
- 如果 nums2 的元素存储在磁盘上,内存是有限的,并且你不能一次加载所有的元素到内存中,你该怎么办?
以上是关于LC 两个数组的交集 II的主要内容,如果未能解决你的问题,请参考以下文章