首页 > 其他 > 详细

【leetcode&CN&竞赛】1198.Find Smallest Common Element in All Rows

时间:2019-09-29 10:28:34      阅读:400      评论:0      收藏:0      [点我收藏+]

题目如下:

给你一个矩阵 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

 

【leetcode&CN&竞赛】1198.Find Smallest Common Element in All Rows

原文:https://www.cnblogs.com/seyjs/p/11596008.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!