LeetCode 1072. 按列翻转得到最大值等行数(查找相同的模式,哈希计数)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1072. 按列翻转得到最大值等行数(查找相同的模式,哈希计数)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1. 題目
給定由若干 0 和 1 組成的矩陣 matrix,從中選出任意數(shù)量的列并翻轉其上的 每個 單元格。
翻轉后,單元格的值從 0 變成 1,或者從 1 變?yōu)?0 。
返回經(jīng)過一些翻轉后,行上所有值都相等的最大行數(shù)。
示例 1: 輸入:[[0,1],[1,1]] 輸出:1 解釋:不進行翻轉,有 1 行所有值都相等。示例 2: 輸入:[[0,1],[1,0]] 輸出:2 解釋:翻轉第一列的值之后,這兩行都由相等的值組成。示例 3: 輸入:[[0,0,0],[0,0,1],[1,1,0]] 輸出:2 解釋:翻轉前兩列的值之后,后兩行由相等的值組成。提示: 1 <= matrix.length <= 300 1 <= matrix[i].length <= 300 所有 matrix[i].length 都相等 matrix[i][j] 為 0 或 1來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/flip-columns-for-maximum-number-of-equal-rows
著作權歸領扣網(wǎng)絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。
2. 解題
- 一開始想是不是動態(tài)規(guī)劃
- 看答案是找最多出現(xiàn)的模式,如11011,00100,反轉第3列后變成11111,00000,都是1或者0
- 那把0開頭的或者1開頭的,選一種,全部翻轉,用哈希表計數(shù),找到最多出現(xiàn)的
384 ms 44.5 MB
class Solution:# py3def maxEqualRowsAfterFlips(self, matrix: List[List[int]]) -> int:d = {}s = [' ']*(len(matrix[0]))for mat in matrix:if mat[0]==0:for i in range(len(mat)):mat[i] ^= 1s[i] = '1' if mat[i] else '0'else:for i in range(len(mat)):s[i] = '1' if mat[i] else '0'strs = ''.join(s)if strs in d:d[strs] += 1else:d[strs] = 1maxcount = 0for key in d:maxcount = max(maxcount, d[key])return maxcount1900 ms 15.5 MB
我 python 不太熟,不太清楚什么操作更高效,如有可優(yōu)化的地方,求大佬指點!感謝!
總結
以上是生活随笔為你收集整理的LeetCode 1072. 按列翻转得到最大值等行数(查找相同的模式,哈希计数)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 1109. 航班预订统
- 下一篇: LeetCode 436. 寻找右区间(