Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 9ba3f6e

Browse files
committed
solve 349.两个数组的交集
1 parent be621a1 commit 9ba3f6e

File tree

3 files changed

+223
-0
lines changed

3 files changed

+223
-0
lines changed

‎zh/349.两个数组的交集.1.java‎

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/*
2+
* @lc app=leetcode.cn id=349 lang=java
3+
*
4+
* [349] 两个数组的交集
5+
*
6+
* https://leetcode-cn.com/problems/intersection-of-two-arrays/description/
7+
*
8+
* algorithms
9+
* Easy (69.29%)
10+
* Likes: 200
11+
* Dislikes: 0
12+
* Total Accepted: 77.4K
13+
* Total Submissions: 111K
14+
* Testcase Example: '[1,2,2,1]\n[2,2]'
15+
*
16+
* 给定两个数组,编写一个函数来计算它们的交集。
17+
*
18+
*
19+
*
20+
* 示例 1:
21+
*
22+
* 输入:nums1 = [1,2,2,1], nums2 = [2,2]
23+
* 输出:[2]
24+
*
25+
*
26+
* 示例 2:
27+
*
28+
* 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
29+
* 输出:[9,4]
30+
*
31+
*
32+
*
33+
* 说明:
34+
*
35+
*
36+
* 输出结果中的每个元素一定是唯一的。
37+
* 我们可以不考虑输出结果的顺序。
38+
*
39+
*
40+
*/
41+
42+
// @lc code=start
43+
class Solution {
44+
public int[] intersection(int[] nums1, int[] nums2) {
45+
Arrays.sort(nums1);
46+
Arrays.sort(nums2);
47+
48+
int i = 0, j = 0;
49+
Set<Integer> set = new HashSet<>();
50+
while (i < nums1.length && j < nums2.length) {
51+
if (nums1[i] == nums2[j]) {
52+
set.add(nums1[i]);
53+
i++;
54+
j++;
55+
} else if (nums1[i] < nums2[j]) {
56+
i++;
57+
} else if (nums1[i] > nums2[j]) {
58+
j++;
59+
}
60+
}
61+
62+
int[] result = new int[set.size()];
63+
int index = 0;
64+
for (int num : set) {
65+
result[index++] = num;
66+
}
67+
68+
return result;
69+
}
70+
}
71+
// @lc code=end
72+

‎zh/349.两个数组的交集.2.java‎

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/*
2+
* @lc app=leetcode.cn id=349 lang=java
3+
*
4+
* [349] 两个数组的交集
5+
*
6+
* https://leetcode-cn.com/problems/intersection-of-two-arrays/description/
7+
*
8+
* algorithms
9+
* Easy (69.29%)
10+
* Likes: 200
11+
* Dislikes: 0
12+
* Total Accepted: 77.4K
13+
* Total Submissions: 111K
14+
* Testcase Example: '[1,2,2,1]\n[2,2]'
15+
*
16+
* 给定两个数组,编写一个函数来计算它们的交集。
17+
*
18+
*
19+
*
20+
* 示例 1:
21+
*
22+
* 输入:nums1 = [1,2,2,1], nums2 = [2,2]
23+
* 输出:[2]
24+
*
25+
*
26+
* 示例 2:
27+
*
28+
* 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
29+
* 输出:[9,4]
30+
*
31+
*
32+
*
33+
* 说明:
34+
*
35+
*
36+
* 输出结果中的每个元素一定是唯一的。
37+
* 我们可以不考虑输出结果的顺序。
38+
*
39+
*
40+
*/
41+
42+
// @lc code=start
43+
class Solution {
44+
public int[] intersection(int[] nums1, int[] nums2) {
45+
Arrays.sort(nums2);
46+
47+
Set<Integer> set = new HashSet<>();
48+
for (int num : nums1) {
49+
if (!set.contains(num) && bsearch(nums2, num)) {
50+
set.add(num);
51+
}
52+
}
53+
54+
int[] result = new int[set.size()];
55+
int index = 0;
56+
for (int num : set) {
57+
result[index++] = num;
58+
}
59+
60+
return result;
61+
}
62+
63+
public boolean bsearch(int[] nums, int target) {
64+
int left = 0;
65+
int right = nums.length - 1;
66+
67+
while (left <= right) {
68+
int mid = left + (right - left) / 2;
69+
if (nums[mid] == target) {
70+
return true;
71+
} else if (nums[mid] < target) {
72+
left = mid + 1;
73+
} else if (nums[mid] > target) {
74+
right = mid - 1;
75+
}
76+
}
77+
78+
return false;
79+
}
80+
}
81+
// @lc code=end
82+

‎zh/349.两个数组的交集.java‎

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* @lc app=leetcode.cn id=349 lang=java
3+
*
4+
* [349] 两个数组的交集
5+
*
6+
* https://leetcode-cn.com/problems/intersection-of-two-arrays/description/
7+
*
8+
* algorithms
9+
* Easy (69.29%)
10+
* Likes: 200
11+
* Dislikes: 0
12+
* Total Accepted: 77.4K
13+
* Total Submissions: 111K
14+
* Testcase Example: '[1,2,2,1]\n[2,2]'
15+
*
16+
* 给定两个数组,编写一个函数来计算它们的交集。
17+
*
18+
*
19+
*
20+
* 示例 1:
21+
*
22+
* 输入:nums1 = [1,2,2,1], nums2 = [2,2]
23+
* 输出:[2]
24+
*
25+
*
26+
* 示例 2:
27+
*
28+
* 输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
29+
* 输出:[9,4]
30+
*
31+
*
32+
*
33+
* 说明:
34+
*
35+
*
36+
* 输出结果中的每个元素一定是唯一的。
37+
* 我们可以不考虑输出结果的顺序。
38+
*
39+
*
40+
*/
41+
42+
// @lc code=start
43+
class Solution {
44+
public int[] intersection(int[] nums1, int[] nums2) {
45+
Set<Integer> set1 = new HashSet<>();
46+
Set<Integer> set2 = new HashSet<>();
47+
for (int num : nums1) {
48+
set1.add(num);
49+
}
50+
for (int num : nums2) {
51+
set2.add(num);
52+
}
53+
54+
List<Integer> list = new ArrayList<>();
55+
for (int num : set2) {
56+
if (set1.contains(num)) {
57+
list.add(num);
58+
}
59+
}
60+
61+
int[] result = new int[list.size()];
62+
for (int i = 0; i < list.size(); i++) {
63+
result[i] = list.get(i);
64+
}
65+
return result;
66+
}
67+
}
68+
// @lc code=end
69+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /