LeetCode 1072. 按列翻转得到最大值等行数(查找相同的模式,哈希计数)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 1072. 按列翻转得到最大值等行数(查找相同的模式,哈希计数)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1. 題目
給定由若干 0 和 1 組成的矩陣 matrix,從中選出任意數(shù)量的列并翻轉(zhuǎn)其上的 每個(gè) 單元格。
翻轉(zhuǎn)后,單元格的值從 0 變成 1,或者從 1 變?yōu)?0 。
返回經(jīng)過(guò)一些翻轉(zhuǎn)后,行上所有值都相等的最大行數(shù)。
示例 1: 輸入:[[0,1],[1,1]] 輸出:1 解釋:不進(jìn)行翻轉(zhuǎn),有 1 行所有值都相等。示例 2: 輸入:[[0,1],[1,0]] 輸出:2 解釋:翻轉(zhuǎn)第一列的值之后,這兩行都由相等的值組成。示例 3: 輸入:[[0,0,0],[0,0,1],[1,1,0]] 輸出:2 解釋:翻轉(zhuǎn)前兩列的值之后,后兩行由相等的值組成。提示: 1 <= matrix.length <= 300 1 <= matrix[i].length <= 300 所有 matrix[i].length 都相等 matrix[i][j] 為 0 或 1來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/flip-columns-for-maximum-number-of-equal-rows
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
- 一開始想是不是動(dòng)態(tài)規(guī)劃
- 看答案是找最多出現(xiàn)的模式,如11011,00100,反轉(zhuǎn)第3列后變成11111,00000,都是1或者0
- 那把0開頭的或者1開頭的,選一種,全部翻轉(zhuǎn),用哈希表計(jì)數(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)化的地方,求大佬指點(diǎn)!感謝!
總結(jié)
以上是生活随笔為你收集整理的LeetCode 1072. 按列翻转得到最大值等行数(查找相同的模式,哈希计数)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 1109. 航班预订统
- 下一篇: LeetCode 436. 寻找右区间(