leetcode 350. Intersection of Two Arrays II


  1. Intersection of Two Arrays II:题目链接

方法1:利用map

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.util.*;

public class Solution1 {
// 时间复杂度O(N) 利用map 跟个数有关
public int[] intersection(int[] nums1, int[] nums2) {
Map<Integer, Integer> map = new HashMap<>(); // 用来存放 nums2
for (int x:nums2){ // 将nums2添加到map
map.put(x, map.getOrDefault(x, 0) + 1);
}

List<Integer> list = new ArrayList<>();
// 遍历nums1 看map中是否含有此元素
for (int i =0; i<nums1.length; ++i) {
if (map.containsKey(nums1[i]) && map.get(nums1[i]) > 0) {
list.add(nums1[i]);
map.put(nums1[i], map.get(nums1[i]) - 1); // 该元素对应次数-1
}
}

// 将list转为数组
int[] res = new int[list.size()];
int index = 0;
for (int x: list){
res[index++] = x;
}
return res;
}

public static void main(String[] args) {
int[] nums1 = {1, 2, 2, 1};
int[] nums2 = {2, 2};
int[] res = (new Solution1()).intersection(nums1, nums2);
System.out.println(Arrays.toString(res));
}
}

方法2:双指针

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
import java.util.*;

public class Solution2 {
// 时间复杂度O(nlog2^n) 双指针
public int[] intersection(int[] nums1, int[] nums2) {
// 先对两个数组 进行排序
Arrays.sort(nums1);
Arrays.sort(nums2);

List<Integer> list = new ArrayList<>(); // 存放答案
int i = 0, j = 0;
while (i < nums1.length && j < nums2.length) {
if (nums1[i] == nums2[j]) {
list.add(nums1[i]);
i++;
j++;
} else if (nums1[i] < nums2[j]) {
i++;
}else {
j++;
}
}

// 将set转为数组
int[] res = new int[list.size()];
int index = 0;
for (Integer x : list) {
res[index++] = x;
}
return res;
}

public static void main(String[] args) {
int[] nums1 = {1, 2, 2, 1};
int[] nums2 = {2, 2};
int[] res = (new Solution1()).intersection(nums1, nums2);
System.out.println(Arrays.toString(res));
}
}

pS: 源代码链接

文章目录
  1. 1. 方法1:利用map
  2. 2. 方法2:双指针
|