想起来的时候只剩最后15分钟了,就尝试了一个题目。

题目描述

给你一个二维整数数组 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 <= numsi <= 1000
nums[i] 中的所有值 互不相同

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intersection-of-multiple-arrays

解题思路

因为二维数组中的每个子数组里面的数字都是互不相同的,那么既然每个子数组都拥有相同的数,那么说明这些数的数量一定等于二维数组的外层长度,使用map来存数量,最后排序遍历一下返回即可

代码

class Solution {
    public List<Integer> intersection(int[][] nums) {
        List<Integer> res=  new ArrayList<>();
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums[i].length; j++) {
                if (map.containsKey(nums[i][j])){
                    int value = map.get(nums[i][j]);
                    map.remove(nums[i][j]);
                    map.put(nums[i][j],++value);
                }else {
                    map.put(nums[i][j],1);
                }
            }
        }
        for (int k :
                map.keySet()) {
            if (map.get(k) == nums.length){
                res.add(k);
            }
        }
        Collections.sort(res);
        return res;
    }
}