leetcode 5077. 按列翻转得到最大值等行数(Flip Columns For Maximum Number of Equal Rows)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 5077. 按列翻转得到最大值等行数(Flip Columns For Maximum Number of Equal Rows)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
- 題目描述:
- 示例 1:
- 示例 2:
- 示例 3:
- 解法:
題目描述:
給定由若干 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 <= 300
- 1 <= matrix[i].length <= 300
- 所有 matrix[i].length 都相等
- matrix[i][j] 為 0 或 1
解法:
class Solution { public:bool valid(vector<int>& lst1, vector<int>& lst2){int sz = lst1.size();int pre = lst1[0]^lst2[0];for(int i = 1; i < sz; i++){if((lst1[i]^lst2[i]) != pre){return false;}}return true;}int maxEqualRowsAfterFlips(vector<vector<int>>& matrix) {int m = matrix.size();int n = matrix[0].size();vector<int> tag(m, 0);for(int i = 1; i < m; i++){tag[i] = i;for(int j = 0; j < i; j++){if(valid(matrix[j], matrix[i])){tag[i] = tag[j];break;}}}vector<int> lst(300, 0);for(int val : tag){// cout<<val<<endl;lst[val]++;}int res = 0;for(int val : lst){res = max(res, val);}return res;} };轉載于:https://www.cnblogs.com/zhanzq/p/10974083.html
總結
以上是生活随笔為你收集整理的leetcode 5077. 按列翻转得到最大值等行数(Flip Columns For Maximum Number of Equal Rows)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 由苹果审核悲剧引发的“血案”
- 下一篇: 简单工厂模式(Simple Factor