349. 兩個數組的交集


題目鏈接:

https://leetcode-cn.com/problems/intersection-of-two-arrays/

 

解題思路:

把其中一個放進hashmap或者hashset,然后另一個去遍歷,如果找到了,題目要求唯一,那就刪掉hashset里面。如果不唯一,那就hashmap里面的count-1,然后直到count==0,刪除。

 1 class Solution {
 2     public int[] intersection(int[] nums1, int[] nums2) {
 3         Set<Integer> hash = new HashSet<>();
 4         int [] a = new int[nums1.length];
 5         for(int i=0;i<nums1.length;i++)
 6         {
 7             hash.add(nums1[i]);
 8         }
 9         int x=0;
10         for(int j=0;j<nums2.length;j++)
11         {
12             if(hash.contains(nums2[j]))
13             {
14                 a[x] = nums2[j];
15                 hash.remove(nums2[j]);
16                 x++;
17             }
18         }
19         
20         int []tt =new int[x];
21         for(int i=0;i<x;i++)
22         {
23             tt[i] = a[i];
24         }
25         return tt;
26     }
27 }
 1 class Solution {
 2     public int[] intersect(int[] nums1, int[] nums2) {
 3         Map<Integer,Integer> hash =new HashMap<>();
 4         for(int i=0;i<nums1.length;i++)
 5         {
 6             if(hash.containsKey(nums1[i]))
 7             {
 8                 int count=hash.get(nums1[i]);
 9                 hash.put(nums1[i],count+1);
10             }
11             else
12             {
13                 hash.put(nums1[i],1);
14             }
15         }
16         int []a =new int [nums2.length];
17         int x=0;
18         for(int i=0;i<nums2.length;i++)
19         {
20             if(hash.containsKey(nums2[i]))
21             {
22                 a[x] =nums2[i];
23                 x++;
24                 int count = hash.get(nums2[i]);
25                 count =count-1;
26                 hash.put(nums2[i],count);
27                 if(hash.get(nums2[i])==0){   //值為0 則map中沒有這個鍵 刪除鍵
28                     hash.remove(nums2[i]);
29                 }
30             }
31         }
32         int[]result = new int[x];
33         for(int i = 0;i<x;i++)
34         {
35             result[i] = a[i];
36         }
37         return result;
38     }
39 }
class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        int m = nums1.length;
        int n = nums2.length;
        ArrayList<Integer> mid = new ArrayList<>();
        Arrays.sort(nums1);
        Arrays.sort(nums2);//先排序,然后大小大小的搞
        int i=0;
        int j=0;
        int k=0;
        while(i<m && j<n)
        {
            if(nums1[i]==nums2[j])
            {
                mid.add(nums1[i]);
                i++;
                j++;
                k++;
            }
            else if (nums1[i]<nums2[j])
            {
                i++;
            }
            else
            {
                j++;
            }
        }
        
        int [] res = new int[k];
        for(int x=0;x<mid.size();x++)
        {
            res[x] = mid.get(x);
        }
        return res;
    }
}

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com