给你一个二维整数数组 nums ,其中 nums[i] 是由 不同 正整数组成的一个非空数组,按 升序排列 返回一个数组,数组中的每个元素在 nums 所有数组 中都出现过。

    示例 1:

    输入:nums = [[3,1,2,4,5],[1,2,3,4],[3,4,5,6]]
    输出:[3,4]
    解释:
    nums[0] = [3,1,2,4,5],nums[1] = [1,2,3,4],nums[2] = [3,4,5,6],在 nums 中每个数组中都出现的数字是 3 和 4 ,所以返回 [3,4] 。
    示例 2:

    输入:nums = [[1,2,3],[4,5,6]]
    输出:[]
    解释:
    不存在同时出现在 nums[0] 和 nums[1] 的整数,所以返回一个空列表 [] 。

    提示:

    1 <= nums.length <= 1000
    1 <= sum(nums[i].length) <= 1000
    1 <= nums[i][j] <= 1000
    nums[i] 中的所有值 互不相同


    1. class Solution {
    2. public List<Integer> intersection(int[][] nums) {
    3. int n = nums.length;
    4. List<Integer> res = new ArrayList<>();
    5. Set<Integer> set = new HashSet<>();
    6. for (int num : nums[0]) set.add(num);
    7. for (int i = 1; i < n; ++i) {
    8. int[] t = nums[i];
    9. Set<Integer> tem = new HashSet<>();
    10. for (int num : t)
    11. if (set.contains(num)) tem.add(num);
    12. set = tem;
    13. }
    14. for (Integer num : set) res.add(num);
    15. res.sort((a, b) -> a - b);
    16. return res;
    17. }
    18. }
    1. class Solution {
    2. /**
    3. nums[i] 都不相同,那么统计每个数字次数,最后遍历求次数等于nums.length
    4. */
    5. public List<Integer> intersection(int[][] nums) {
    6. List<Integer> res = new ArrayList<>();
    7. int[] cnts = new int[1010];
    8. for (int[] num : nums)
    9. for (int t : num) cnts[t]++;
    10. for (int i = 1; i <= 1000; ++i)
    11. if (cnts[i] == nums.length) res.add(i);
    12. return res;
    13. }
    14. }