LeetCode 1072. 按列翻转得到最大值等行数(查找相同的模式,哈希计数)
发布日期:2021-07-01 03:27:19
浏览次数:2
分类:技术文章
本文共 1980 字,大约阅读时间需要 6 分钟。
1. 题目
给定由若干 0 和 1 组成的矩阵 matrix,从中选出任意数量的列并翻转其上的 每个 单元格。
翻转后,单元格的值从 0 变成 1,或者从 1 变为 0 。返回经过一些翻转后,行上所有值都相等的最大行数。
示例 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 <= 3001 <= 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 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 一开始想是不是动态规划
- 看答案是找最多出现的模式,如11011,00100,反转第3列后变成11111,00000,都是1或者0
- 那把0开头的或者1开头的,选一种,全部翻转,用哈希表计数,找到最多出现的
class Solution { //C++public: int maxEqualRowsAfterFlips(vector>& matrix) { unordered_map m; string s(matrix[0].size(),' '); for(auto& mat : matrix) { if(mat[0] == 0) { for(int i = 0; i < mat.size(); ++i) { mat[i] ^= 1; s[i] = mat[i] ? '1' : '0'; } } else { for(int i = 0; i < mat.size(); ++i) s[i] = mat[i] ? '1' : '0'; } m[s]++; } int maxCount = 0; for(auto it = m.begin(); it != m.end(); ++it) maxCount = max(maxCount, it->second); return maxCount; }};
384 ms 44.5 MB
class Solution:# py3 def 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] ^= 1 s[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] += 1 else: d[strs] = 1 maxcount = 0 for key in d: maxcount = max(maxcount, d[key]) return maxcount
1900 ms 15.5 MB
我 python 不太熟,不太清楚什么操作更高效,如有可优化的地方,求大佬指点!感谢!
转载地址:https://michael.blog.csdn.net/article/details/106972120 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年04月30日 00时47分12秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【IDE-Visual Studio】vs2010 -MFC-查看程序执行过程
2019-05-02
Netfilter是如何工作的(二) 表(table)与规则(rule)
2019-05-02
Netfilter是如何工作的(三) 规则的匹配(match)
2019-05-02
Netfilter 是如何工作的(四):动作(target)
2019-05-02
Netfilter 是如何工作的(五):初识连接跟踪(connection track)
2019-05-02
TAILQ 之一二事
2019-05-02
锁与无锁
2019-05-02
IP地址是主机的还是网卡的 ?
2019-05-02
inet socket 与 packet socket
2019-05-02
Nagle算法
2019-05-02
TCP三步握手建立连接(2)-----被动连接方发送SYN/ACK
2019-05-02
TCP三步握手建立连接(3)-----被动连接方接收ACK处理
2019-05-02
TCP 发送流程
2019-05-02
Linux TCP数据包接收流程
2019-05-02
Linux TCP 拥塞控制实现机制
2019-05-02
Linux TCP数据包接收处理
2019-05-02
EPOLL 内核实现
2019-05-02
MySQL 内存模型
2019-05-02
MySQL 索引概述
2019-05-02
SQL 语句优化
2019-05-02