Skip to content

Latest commit

 

History

History
147 lines (116 loc) · 3.67 KB

File metadata and controls

147 lines (116 loc) · 3.67 KB

English Version

题目描述

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

解法

Python3

class Solution:
    def intersection(self, nums: List[List[int]]) -> List[int]:
        cnt = [0] * 1001
        for num in nums:
            for v in num:
                cnt[v] += 1
        n = len(nums)
        return [i for i, v in enumerate(cnt) if v == n]

Java

class Solution {
    public List<Integer> intersection(int[][] nums) {
        int[] cnt = new int[1001];
        for (int[] num : nums) {
            for (int i : num) {
                cnt[i]++;
            }
        }
        List<Integer> ans = new ArrayList<>();
        for (int i = 1; i <= 1000; i++) {
            if (cnt[i] == nums.length) {
                ans.add(i);
            }
        }
        return ans;
    }
}

TypeScript

function intersection(nums: number[][]): number[] {
    const n = nums.length;
    let ans = nums[0];
    for (let i = 1; i < n && ans.length; i++) {
        const cur = new Set(nums[i]);
        // get intersect
        ans = ans.filter(v => cur.has(v));
    }
    return ans.sort((a, b) => a - b);
}

C++

class Solution {
public:
    vector<int> intersection(vector<vector<int>>& nums) {
        vector<int> cnt(1001);
        for (auto& num : nums)
            for (int v : num)
                ++cnt[v];
        int n = nums.size();
        vector<int> ans;
        for (int i = 1; i < 1001; ++i)
            if (cnt[i] == n)
                ans.push_back(i);
        return ans;
    }
};

Go

func intersection(nums [][]int) []int {
	cnt := make([]int, 1001)
	for _, num := range nums {
		for _, v := range num {
			cnt[v]++
		}
	}
	var ans []int
	for i, v := range cnt {
		if v == len(nums) {
			ans = append(ans, i)
		}
	}
	return ans
}

...