Give a number of arrays, find their intersection, and output their intersection size.
Example
Example 1:
Input: [[1,2,3],[3,4,5],[3,9,10]]
Output: 1
Explanation:
Only '3' in all three array.
Example 2:
Input: [[1,2,3,4],[1,2,5,6,7][9,10,1,5,2,3]]
Output: 2
Explanation:
The set is [1,2].
Notice
- The total number of all array elements is not more than
500000
. - There are no duplicated elements in each array.
Code (Java):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | public class Solution { /** * @param arrs: the arrays * @return: the number of the intersection of the arrays */ public int intersectionOfArrays( int [][] arrs) { // write your code here if (arrs == null || arrs.length == 0 ) { return 0 ; } return intersectionOfArraysHelper( 0 , arrs.length - 1 , arrs).length; } private int [] intersectionOfArraysHelper( int start, int end, int [][] arrs) { if (start == end) { return arrs[start]; } int mid = start + (end - start) / 2 ; int [] left = intersectionOfArraysHelper(start, mid, arrs); int [] right = intersectionOfArraysHelper(mid + 1 , end, arrs); return intersectionOfTwoArray(left, right); } private int [] intersectionOfTwoArray( int [] left, int [] right) { Arrays.sort(left); Arrays.sort(right); int i = 0 ; int j = 0 ; List<Integer> ans = new ArrayList<>(); while (i < left.length && j < right.length) { if (left[i] == right[j]) { ans.add(left[i]); i++; j++; } else if (left[i] < right[j]) { i++; } else { j++; } } int [] ans2 = new int [ans.size()]; for (i = 0 ; i < ans2.length; i++) { ans2[i] = ans.get(i); } return ans2; } } |