LeetCode 349. Intersection of Two Arrays

Given two integer arrays nums1 and nums2, return an array of their intersection. Each element in the result must be unique and you may return the result in any order.

Example 1:

Input: nums1 = [1,2,2,1], nums2 = [2,2]
Output: [2]

Example 2:

Input: nums1 = [4,9,5], nums2 = [9,4,9,8,4]
Output: [9,4]
Explanation: [4,9] is also accepted.

Constraints:

  • 1 <= nums1.length, nums2.length <= 1000
  • 0 <= nums1[i], nums2[i] <= 1000

就,没什么特殊的技巧,不用built in的set intersection就硬写一个呗。java没有直接从数组到set的互相转换(or LC的编译器不支持)搞得有点烦。就是做intersect的时候遍历小的,在大的里找小的会更省时间。

Runtime: 6 ms, faster than 52.67% of Java online submissions for Intersection of Two Arrays.

Memory Usage: 44.1 MB, less than 36.58% of Java online submissions for Intersection of Two Arrays.

class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        Set<Integer> set1 = new HashSet<>();
        for (int num : nums1) {
            set1.add(num);
        }
        
        Set<Integer> set2 = new HashSet<>();
        for (int num : nums2) {
            set2.add(num);
        }
        
        List<Integer> resultList = set1.size() < set2.size() ? intersect(set1, set2) : intersect(set2, set1);
        int result[] = new int[resultList.size()];
        for (int i = 0; i < resultList.size(); i++) {
            result[i] = resultList.get(i);
        }
        return result;
    }
    
    private List<Integer> intersect(Set<Integer> small, Set<Integer> large) {
        List<Integer> result = new ArrayList<>();
        for (int i : small) {
            if (large.contains(i)) {
                result.add(i);
            }
        }
        return result;
    }
}

然后看了一下讨论,有人说这题被标上了binary search。如果给定的数组是sorted的话,可以用二分查找。尤其是当n << m时,O(nlogm)可能比O(n+m)还快,嗯,着实是没想到。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值