【leetcode&CN&竞赛】1198.Find Smallest Common Element in All Rows
题目如下:
给你一个矩阵
mat
,其中每一行的元素都已经按 递增 顺序排好了。请你帮忙找出在所有这些行中 最小的公共元素。如果矩阵中没有这样的公共元素,就请返回
-1
。示例:
输入:mat = [[1,2,3,4,5],[2,4,5,8,10],[3,5,7,9,11],[1,3,5,7,9]] 输出:5提示:
1 <= mat.length, mat[i].length <= 500
1 <= mat[i][j] <= 10^4
mat[i]
已按递增顺序排列。
解题思路:我最初的想法遍历整个矩阵,记录每一个值出现的个数,如果某个值出现的次数恰好等于矩阵的行数,说明这个值是一个公共的值。但是考虑到可能一行内有重复值的情况,改成用二进制的方式记录每个值出现在的行数,这样就可以避免重复计算。
代码如下:
class Solution(object): def smallestCommonElement(self, mat): """ :type mat: List[List[int]] :rtype: int """ val = [0] * (10**4+1) for i in range(len(mat)): for j in range(len(mat[i])): val[mat[i][j]] |= 2**i for i in range(len(val)): if val[i] == 2**len(mat) - 1: return i return -1