leetcode:Intersection of Two Arrays

来源:互联网 发布:wow 1.12数据库 编辑:程序博客网 时间:2024/05/20 01:09

349. Intersection of Two Arrays

 My Submissions
Total Accepted: 16575 Total Submissions: 36982 Difficulty: Easy

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.
方法一:复杂度O(n)
普遍的方法:通过两个数组的遍历实现。
import java.util.HashSet;import java.util.Set;public class Solution {    public int[] intersection(int[] nums1, int[] nums2) {        Set<Integer> temp = new HashSet<Integer>();        for(int i = 0; i < nums1.length; i ++) {            for(int j = 0; j < nums2.length; j ++) {                if(nums1[i] == nums2[j]) {                    temp.add(nums1[i]);                }            }        }        int[] solution = new int[temp.size()];        int j = 0;        for(Integer i:temp) {            solution[j] = i;            j++;        }        return solution;    }}
普遍的方法:通过两个set集合的遍历实现。
为什么用set集合?
Collection
    --List:有顺序,能重复
          --ArrayList / LinkedList / Vector
    --Set :无顺序,不能重复
          --HashSet / TreeSet
import java.util.HashSet;import java.util.Set;public class Solution {    public int[] intersection(int[] nums1, int[] nums2) {        Set<Integer> set1 = new HashSet<Integer>();        Set<Integer> set2 = new HashSet<Integer>();        for(int c: nums1) {            set1.add(c);        }        for(int c:nums2) {            if(set1.contains(c)) {                set2.add(c);            }        }        int[] temp = new int[set2.size()];        int j = 0;        for(Integer c:set2) {            temp[j] = c;            j ++;        }        return temp;          }}
方法二:复杂度O(logn)
import java.util.HashSet;import java.util.Set;import java.util.Arrays;  public class Solution {    public int[] intersection(int[] nums1, int[] nums2) {        Set<Integer> set1 = new HashSet<Integer>();        Arrays.sort(nums1);        Arrays.sort(nums2);        int i = 0;        int j = 0;        while((i < nums1.length) && (j < nums2.length)) {            if(nums1[i] < nums2[j]) {                i ++;            } else if(nums1[i] > nums2[j]){                j ++;            } else {                set1.add(nums1[i]);                i ++;                j ++;            }        }        int z = 0;        int[] solution = new int[set1.size()];        for(Integer c: set1) {            solution[z] = c;            z ++;        }        return solution;       }}
查找两个数组的相同元素,可以先排序,在进行数组比较,这是很好的一个办法。



0 0