LeetCode 349 Intersection of Two Arrays

来源:互联网 发布:2016淘宝客pid怎么看 编辑:程序博客网 时间:2024/05/18 00:37

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

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

Note:

  • Each element in the result must be unique.

  • The result can be in any order.
方法一:使用set
public int[] intersection(int[] nums1, int[] nums2) {Set<Integer> set = new HashSet<Integer>();for (int i = 0; i < nums1.length; i++)set.add(nums1[i]);int[] result = new int[nums2.length];int k = 0;for (int i = 0; i < nums2.length; i++)if (set.contains(nums2[i])) {result[k++] = nums2[i];set.remove(nums2[i]); //一定要删除}return Arrays.copyOfRange(result, 0, k);}

方法二:先排序,比方法一效率略高。因为方法一里,for循环调用HashSet.contains( ),而HashSet.contains( )效率并不是O(1)。
public int[] intersection2(int[] nums1, int[] nums2) {Arrays.sort(nums1);Arrays.sort(nums2);int[] result = new int[nums2.length];int i = 0, j = 0, k = 0;while (i < nums1.length && j < nums2.length) {if (nums1[i] < nums2[j]) {i++;} else if (nums1[i] > nums2[j]) {j++;} else {result[k++] = nums1[i++];while (i < nums1.length && nums1[i] == nums2[j]) i++;j++;}}return Arrays.copyOfRange(result, 0, k);}


1 0