[349] 两个数组的交集

/*
 * @lc app=leetcode.cn id=349 lang=java
 *
 * [349] 两个数组的交集
 */

// @lc code=start
class Solution {
    /**
     * Hash检测法
     * 57/57 cases passed (3 ms)
        Your runtime beats 49.51 % of java submissions
        Your memory usage beats 63.84 % of java submissions (42.3 MB)
     */
    // public int[] intersection(int[] nums1, int[] nums2) {
    //     HashSet<Integer> set = new HashSet<>();
    //     for(int ele : nums1){
    //         set.add(ele);
    //     }

    //     List<Integer> ans = new ArrayList<>((int)Math.min(nums1.length, nums2.length));
    //     for(int ele : nums2){
    //         Integer eleObj = ele;
    //         if(!set.remove(eleObj)){
    //             continue;
    //         }

    //         ans.add(eleObj);
    //     }

    //     int[] ansArr = new int[ans.size()];
    //     for(int i = 0; i < ansArr.length; i++){
    //         ansArr[i] = ans.get(i);
    //     }
        
    //     return ansArr;
    // }

    /**
     * 排序法
     * 57/57 cases passed (2 ms)
        Your runtime beats 87.98 % of java submissions
        Your memory usage beats 96.07 % of java submissions (42 MB)
     */
    public int[] intersection(int[] nums1, int[] nums2) {
        Arrays.sort(nums1);
        Arrays.sort(nums2);

        List<Integer> ans = new ArrayList<>((int)Math.min(nums1.length, nums2.length));
        {
            int i = 0, j = 0;

            int preEle = -1;
            while(i < nums1.length && j < nums2.length){
                int ele1 = nums1[i];
                if(ele1 < nums2[j]){
                    i++;
                    continue;
                }
                if(ele1 > nums2[j]){
                    j++;
                    continue;
                }

                i++;
                j++;

                if(ele1 == preEle){
                    continue;
                }

                ans.add(ele1);
                preEle = ele1;
            }
        }

        int[] ansArr = new int[ans.size()];
        for(int i = 0; i < ansArr.length; i++){
            ansArr[i] = ans.get(i);
        }
        
        return ansArr;
    }
}
// @lc code=end

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值