美文网首页
Leetcode - Intersection of Two A

Leetcode - Intersection of Two A

作者: Richardo92 | 来源:发表于2016-09-22 05:24 被阅读41次

    My code:

    public class Solution {
        public int[] intersect(int[] nums1, int[] nums2) {
            if (nums1 == null || nums2 == null) {
                return null;
            }
            
            HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
            List<Integer> retList = new ArrayList<Integer>();
            
            for (int i = 0; i < nums1.length; i++) {
                if (!map.containsKey(nums1[i])) {
                    map.put(nums1[i], 1);
                }
                else {
                    map.put(nums1[i], map.get(nums1[i]) + 1);
                }
            }
            
            for (int i = 0; i < nums2.length; i++) {
                if (!map.containsKey(nums2[i])) {
                    continue;
                }
                else {
                    retList.add(nums2[i]);
                    map.put(nums2[i], map.get(nums2[i]) - 1);
                    if (map.get(nums2[i]) == 0) {
                        map.remove(nums2[i]);
                    }
                }
            }
            
            int[] ret = new int[retList.size()];
            for (int i = 0; i < retList.size(); i++) {
                ret[i] = retList.get(i);
            }
            return ret;
        }
    }
    

    和 I 差不多,思路很直接。
    下面讨论下他的三个 follow up

    1 . What if the given array is already sorted? How would you optimize your algorithm?
    2 . What if nums1's size is small compared to nums2's size? Which algorithm is better?
    3 . What if elements of nums2 are stored on disk, and the memory is limited such that you cannot load all elements into the memory at once?

    1 . 可以用类似于merge sort 的办法, 双指针。
    2 . 对较长的 array 作 sort, 然后,遍历较短的array,拿出它的元素,去较长的array里面做 binary search,找到之后,标记已经用过。
    plus: 这个方法好像不太好。上面的两个方法对这个问题都适用啊,复杂度是 O(m + n)

    3 .
    reference:
    https://discuss.leetcode.com/topic/45992/solution-to-3rd-follow-up-question

    如果,只有一个数组放不进去。那么,可以用hashtable的方法,然后每次read chunk of that big array

    如果,两个都放不进去,那么就用 排序的方法。
    对两个数组分别进行 external sort
    然后再双指针 merge。

    External Sort:
    http://faculty.simpson.edu/lydia.sinapova/www/cmsc250/LN250_Weiss/L17-ExternalSortEX2.htm

    Anyway, Good luck, Richardo! -- 09/21/2016

    相关文章

      网友评论

          本文标题:Leetcode - Intersection of Two A

          本文链接:https://www.haomeiwen.com/subject/lzfzettx.html