zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    【SICP练习】80 练习2.52
    【SICP练习】79 练习2.51
    【SICP练习】78 练习2.50
    【SICP练习】77 练习2.48-2.49
    【SICP练习】76 练习2.47
    【SICP练习】75 练习2.46
    【SICP练习】74 练习2.45
    【SICP练习】73 练习2.44
    【SICP练习】72 练习2.43
    【SICP练习】71 练习2.42
  • 原文地址:https://www.cnblogs.com/seyjs/p/11596008.html
Copyright © 2011-2022 走看看