我用java刷 leetcode 349. 两个数组的交集
Posted 深林无鹿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我用java刷 leetcode 349. 两个数组的交集相关的知识,希望对你有一定的参考价值。
这里有leetcode题集分类整理!!!
我的脑溢血AC:【数组+双指针】
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Arrays.sort(nums1);
Arrays.sort(nums2);
int len1 = nums1.length;
int len2 = nums2.length;
int maxLen = len1 > len2? len1:len2;
int minLen = len1 < len2? len1:len2;
int[] res = new int[minLen];
int i = 0, j = 0, t = 0;
while (i < len1 && j < len2) {
if (nums1[i] == nums2[j]) {
if (t == 0) {
res[t ++] = nums1[i];
}
if (t > 0 && res[t - 1] != nums1[i]) {
res[t ++] = nums1[i];
}
i ++; j ++;
continue;
}
if (nums1[i] < nums2[j]) {
i ++ ;
continue;
}
if (nums1[i] > nums2[j]) {
j ++ ;
continue;
}
}
return Arrays.copyOfRange(res, 0, t);
}
}
官方题解:【集合操作】
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
Set<Integer> set1 = new HashSet<Integer>();
Set<Integer> set2 = new HashSet<Integer>();
for (int num : nums1) {
set1.add(num);
}
for (int num : nums2) {
set2.add(num);
}
return getIntersection(set1, set2);
}
public int[] getIntersection(Set<Integer> set1, Set<Integer> set2) {
if (set1.size() > set2.size()) {
return getIntersection(set2, set1);
}
Set<Integer> intersectionSet = new HashSet<Integer>();
for (int num : set1) {
if (set2.contains(num)) {
intersectionSet.add(num);
}
}
int[] intersection = new int[intersectionSet.size()];
int index = 0;
for (int num : intersectionSet) {
intersection[index++] = num;
}
return intersection;
}
}
作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/intersection-of-two-arrays/solution/liang-ge-shu-zu-de-jiao-ji-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
效率最高的代码:
class Solution {
public int[] intersection(int[] nums1, int[] nums2) {
int[] hash = new int[1001];
for(int num : nums1){
hash[num] = 1;
}
int[] res = new int[nums1.length];
int idx = 0;
for(int num : nums2){
if(hash[num] == 1){
res[idx++] = num;
hash[num]--;
}
}
return Arrays.copyOf(res,idx);
}
}
以上是关于我用java刷 leetcode 349. 两个数组的交集的主要内容,如果未能解决你的问题,请参考以下文章
我用java刷 leetcode 剑指 Offer 25. 合并两个排序的链表