【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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM