350_LeetCode_350 Intersection of Two Arrays II 题解

Description


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.

349的变体,返回两个数组的交集,有重复时,全部返回。


解:


  • 使用HashMap,以数组元素作为key,元素出现的个数为value。遍历数组1建立哈希表。之后,遍历数组2,如果当前元素在哈希表中的value大于0,则将此字符加入结果中,然后哈希表的对应value减1。
  • 先对两个数组排序,然后用两个下标分别指向两个数组的起始位置,如果两个下标指的数字相等,则存入结果中,两个下标均后移;如果第一个下标指的数字大,则第二个下标后移,反之亦然。直到其中一个数组遍历完毕。

java代码:


class Solution {
    public int[] intersect(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        List list = new ArrayList();
        int i = 0, j = 0;
        while (i < nums1.length && j < nums2.length) {
            if (nums1[i] == nums2[j]){
                list.add(nums1[i]);
                i++;
                j++;
            }
            else if (nums1[i] > nums2[j]) j++;
            else i++;
        }
        int[] res = new int[list.size()];
        for (int k = 0; k < res.length; k++){
            res[k] = list.get(k);
        }
        return res;
    }
}

你可能感兴趣的:(LeetCode题解)