LeetCode-350. Intersection of Two Arrays II (Java)

来源:互联网 发布:it编程培训中心 编辑:程序博客网 时间:2024/06/03 17:29

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) {         HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();        ArrayList<Integer> result = new ArrayList<Integer>();        for(int i = 0; i < nums1.length; i++)        {            if(map.containsKey(nums1[i])) map.put(nums1[i], map.get(nums1[i])+1);            else map.put(nums1[i], 1);        }            for(int i = 0; i < nums2.length; i++)        {            if(map.containsKey(nums2[i]) && map.get(nums2[i]) > 0)            {                result.add(nums2[i]);                map.put(nums2[i], map.get(nums2[i])-1);            }        }           int[] r = new int[result.size()];       for(int i = 0; i < result.size(); i++)       {           r[i] = result.get(i);       }           return r;    }}

还有一种方法,在求重合时比较常用
public class Solution {    public int[] intersect(int[] nums1, int[] nums2) {            Arrays.sort(nums1);            Arrays.sort(nums2);            int pnt1 = 0;            int pnt2 = 0;            ArrayList<Integer> myList = new ArrayList<Integer>();            while((pnt1 < nums1.length) && (pnt2 < nums2.length)){                if(nums1[pnt1] < nums2[pnt2]) pnt1++;                else if(nums1[pnt1] > nums2[pnt2]) pnt2++;                else {                    myList.add(nums1[pnt1]);                    pnt1++; pnt2++;                }            }            int len = myList.size();            int[] res = new int[len];            for(int i = 0; i < len; i++){                res[i] = myList.get(i);            }            return res;    }}

使用while循环,然后对两个数组的索引进行操作,但是前提是这两个数组要是有序的。

原创粉丝点击