兩數組的交集(無重複)Intersection of Two Arrays

問題:數組

Given two arrays, write a function to compute their intersection.spa

Example:
Given nums1 = [1, 2, 2, 1]nums2 = [2, 2], return [2].指針

Note:code

  • Each element in the result must be unique.
  • The result can be in any order.

解決:element

①使用hashSet保存nums1數組中的值,而後比較便可。耗時5ms.rem

public class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        List<Integer> list = new ArrayList<>();
        Set<Integer> set = new HashSet<>();
        for (int n : nums1) {
            set.add(n);
        }
        for (int n : nums2) {
            if (set.contains(n)) {
                list.add(n);
                set.remove(n);
            }
        }
        int res[] = new int[list.size()];
        for(int i = 0;i < list.size();i ++ ){
            res[i] = list.get(i);
        }
        return res;
    }
}get

②使用雙指針法, 使用一個臨時數組保存相同的數值,當掃描時存在與臨時數組最後一個值相同的數時,跳過,不然,添加到臨時數組中。hash

public class Solution {
    public int[] intersection(int[] nums1, int[] nums2) {
        if (nums1 == null || nums2 == null || nums1.length == 0 || nums2.length == 0) return new int[0];
        Arrays.sort(nums1);
        Arrays.sort(nums2);
        int temp[] = new int[nums1.length];
        int p1 = 0;
        int p2 = 0;
        int p = 0;
        while(p1 < nums1.length && p2 < nums2.length){
            if (nums1[p1] == nums2[p2]) {
                if (p - 1 >= 0 && temp[p - 1] == nums1[p1]) {//相同的值重複
                    //什麼都不作
                }else{
                    temp[p] = nums1[p1];
                    p ++;
                }
                p1 ++;
                p2 ++;
            }else if (nums1[p1] < nums2[p2]) {
                p1 ++;
            }else{
                p2 ++;
            }
        }
        int res[] = new int[p];
        for (int i = 0;i < p ;i ++ ) {
            res[i] = temp[i];
        }

        return res;
    }
}it

相關文章
相關標籤/搜索