350. Intersection of Two Arrays II

来源:互联网 发布:易我数据恢复好用吗 编辑:程序博客网 时间:2024/06/05 18:52

Given two arrays, write a function to compute their intersection.

Example:
Given nums1 = [1, 2, 2, 1]nums2 = [2, 2], return [2, 2].

Note:

  • Each element in the result should appear as many times as it shows in both arrays.
  • The result can be in any order.
public class Solution {    public int[] intersect(int[] nums1, int[] nums2) {        Map<Integer,Integer> s=new HashMap<>();        List<Integer> q=new ArrayList<>();        for(int i:nums1){            s.put(i,s.getOrDefault(i,0)+1);        }        for(int i:nums2){            if(s.containsKey(new Integer(i))){                if(s.get(i)-1<0)                    s.remove(i);                else {                    s.put(i,s.get(i)-1);                    q.add(i);                }            }        }        int[] result=new int[q.size()];        for(int i=0;i<q.size();i++){            result[i]=q.get(i).intValue();        }        return result;    }}

这是使用HashMap集合的方法解决问题,还有一种方式是首先通过排序将数组排序,然后根据大小顺序依次输出


public class Solution {    public int[] intersect(int[] nums1, int[] nums2) {                   Arrays.sort(nums1);        Arrays.sort(nums2);        int[] flag=new int[nums1.length];        int z=0;        for(int i=0,j=0;i<nums1.length&&j<nums2.length;){            if(nums1[i]<nums2[j])i++;            else if(nums1[i]>nums2[j]) j++;            else {                flag[z]=nums1[i];                i++;                z++;                j++;            }        }        int[] result=new int[z];        System.arraycopy(flag,0,result,0,z);        return result;    }}





原创粉丝点击