两个数组的交集
2021-03-17 18:27
标签:出现 star java 数组的交集 时间复杂度 示例 hash表 += 磁盘 给定两个数组,编写一个函数来计算它们的交集。 示例 1: 输入:nums1 = [1,2,2,1], nums2 = [2,2] 示例 2: 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4] 说明: ****进阶: 代码如下 ps:对int[]数组的复制操作 区别:Arrays.copyOf()不仅仅只是拷贝数组中的元素,在拷贝元素时,会创建一个新的数组对象。而System.arrayCopy只拷贝已经存在数组元素。 ? Array.copyOf()底层是调用的System.arrayCopy(new了一个数组对象,复制后返回) 代码如下 ps:这里新建数组可以改成如下。 ? 两个数组的交集 标签:出现 star java 数组的交集 时间复杂度 示例 hash表 += 磁盘 原文地址:https://www.cnblogs.com/g9420/p/13964212.html1.问题描述
输出:[2,2]
输出:[4,9]
2.求解
哈希表
/*
* 执行用时:4 ms, 在所有 Java 提交中击败了53.75% 的用户
* 内存消耗:38.9 MB, 在所有 Java 提交中击败了51.97% 的用户
* */
public int[] intersect(int[] nums1, int[] nums2) {
if(nums2.length > nums1.length){
return intersect(nums2,nums1);
}
Map
System.arraycopy(arr, copied, start, end);
Arrays.copyOfRange(intersection, 0, index);
排序 + 双指针
/*
*执行用时:1 ms, 在所有 Java 提交中击败了100.00% 的用户
*内存消耗:38.8 MB, 在所有 Java 提交中击败了75.93% 的用户
*/
public int[] intersect(int[] nums1, int[] nums2) {
Arrays.sort(nums1);
Arrays.sort(nums2);
int m = nums1.length;
int n = nums2.length;
int[] res = new int[m + n];
int length = 0;
int i = 0, j = 0;
while(i
int[] res = new int[Math.min(m,n)]
,这样空间复杂度就变成了O(min(m,n))
上一篇:java方法.2方法的重载
下一篇:关于数组常用方法