LeetCode --- 136双周赛

server/2024/10/20 3:41:30/

题目列表

3238. 求出胜利玩家的数目

3239. 最少翻转次数使二进制矩阵回文 I

3240. 最少翻转次数使二进制矩阵回文 II

3241. 标记所有节点需要的时间

一、求出胜利玩家的数量

这题可以直接模拟统计符合条件的玩家数量,代码如下

class Solution {
public:int winningPlayerCount(int n, vector<vector<int>>& pick) {vector<array<int,11>> cnt(n);for(auto p:pick){cnt[p[0]][p[1]]++;}int ans = 0;for(int i = 0; i < n; i++){for(int y:cnt[i]){if(y > i){ans++;break;}}}return ans;}
};

二、最小翻转次数使得二进制矩阵回文 I

根据题目要求,我们按所有行回文计算一下翻转次数 ,再按所有列回文计算一下翻转次数,取最小值即可,代码如下

class Solution {
public:int minFlips(vector<vector<int>>& grid) {int n = grid.size(), m = grid[0].size();int ans[2]{};for(int i = 0; i < n; i++){for(int j = 0; j < m/2; j++){ans[0] += (grid[i][j] != grid[i][m-j-1]);}}for(int j = 0; j < m; j++){for(int i = 0; i < n/2; i++){ans[1] += (grid[i][j] != grid[n-i-1][j]);}}return min(ans[0], ans[1]);}
};

三、最小翻转次数使得二进制矩阵回文 II

这题要求每行每列都要回文,并且要求矩阵中1的个数都能被4整除,求最小翻转次数。

这题的关键在于如何满足矩阵中1的个数能被4整除,我们先来举个例子来观察一下每行和每列都要回文的矩阵的特点

代码如下

class Solution {
public:int minFlips(vector<vector<int>>& grid) {int n = grid.size(), m = grid[0].size();int ans = 0; // 记录四个角矩阵中需要修改的最小操作次数for(int i = 0; i < n/2; i++){for(int j = 0; j < m/2; j++){int cnt[2]{};cnt[grid[i][j]]++;cnt[grid[i][m-j-1]]++;cnt[grid[n-i-1][j]]++;cnt[grid[n-i-1][m-j-1]]++;ans += min(cnt[0], cnt[1]);}}// cnt 记录单独一行/一列变为回文,需要的操作次数// cnt1 记录单独一行/一列中 1 的个数int cnt = 0, cnt1 = 0;if(n%2){for(int j = 0; j < m/2; j++){cnt += (grid[n/2][j]!=grid[n/2][m-j-1]);cnt1 += grid[n/2][j] + grid[n/2][m-j-1];}}if(m%2){for(int i = 0; i < n/2; i++){cnt += (grid[i][m/2]!=grid[n-i-1][m/2]);cnt1 += (grid[i][m/2] + grid[n-i-1][m/2]);}}if(n%2 && m%2){if(grid[n/2][m/2] == 1)ans++;}return ans + (cnt == 0 ? cnt1%4 : cnt);}
};

四、标记所有点需要的时间

对于给出操作流程,要求算出以每一个结点为根节点完成流程所需时间的题目,有一种通用的思路:先计算以某一个结点完成流程的时间,然后根据这个结点来计算其他结点完成操作流程的时间。(这类题统称为换根dp)

这题也是同理,我们先要计算出以0为根节点时,所有结点被标记所需要的时间,然后根据这一结果计算其他结点为根时的情况,最后返回即可。

代码如下

class Solution {struct Node{int _fi,_se,_child;Node(){}Node(int fi,int se,int child):_fi(fi),_se(se),_child(child){}};
public:vector<int> timeTaken(vector<vector<int>>& edges) {int n = edges.size() + 1;vector<vector<int>>g(n);for(auto e:edges){g[e[0]].push_back(e[1]);g[e[1]].push_back(e[0]);}// time[i] 记录 i 所在子树被标记的最大时间,次大时间 和最大时间的子树,不包含 i 被标记的时间vector<Node> time(n);function<int(int,int)>dfs=[&](int x,int fa)->int{int fi = 0, se = 0, child = 0;for(int y:g[x]){if(y != fa){int res = dfs(y, x) + (2 - y%2);if(res > fi) se = fi, fi = res, child = y;else if(res > se) se = res;}}time[x] = Node(fi, se, child);return fi;};dfs(0, -1);vector<int> ans(n);function<void(int,int,int)>reroot=[&](int x,int fa,int fa_mx){auto [fi,se,child] = time[x];ans[x] = max(fa_mx, fi);for(int y:g[x]){if(y != fa){int up1 = (y == child ? se : fi) + 2 - x%2;int up2 = fa_mx + 2 - x%2;reroot(y, x, max(up1, up2));}}};reroot(0,-1,0);return ans;}
};

http://www.ppmy.cn/server/99966.html

相关文章

【应用开发】关于RS232串口如何进行数据传输

【应用开发】关于RS232串口如何进行数据传输 1.背景2. 传输1.背景 RS-232C 全双工通信利用 TX 和 RX 引脚在独立的线路上同时传输和接收模拟电压信号,从而实现高效的双向数据通信。 这种全双工模式使得 RS-232C 在需要双向实时通信的应用中表现得非常出色。 在编程时上位机发…

变量的注意或许需要调试

输入一个自然数N&#xff08;1<N<9&#xff09;&#xff0c;从小到大输出用1~N组成的所有排列&#xff0c;也就说全排列。例如输入3则输出 123 132 213 231 312 321 输入格式: 输入一个自然数N&#xff08;1<N<9&#xff09; 输出格式: N的全排列&#xff0c;每行一…

OpenCV 与多视图几何

欢迎访问我的博客首页。 OpenCV 与多视图几何 1. 工具函数2. 本质矩阵3. 单应矩阵4. 基础矩阵5. 参考 1. 工具函数 像素坐标、归一化坐标和相机坐标之间的相互转化。 #include <iostream> #include <opencv2/opencv.hpp>// 相机坐标系到像素坐标系的变换。 cv::Po…

前端工程化项目 用npm拉git项目的时候是在是太慢了怎么办

最近在家拉git项目发现npm i之后,开始下得挺快&#xff0c;过会就卡着不动了&#xff0c;大概几分钟后才下好。这对一个有强迫症的码农来说是不能容忍的。 只能退出去 重新下载 其实我们只要换一下国内的下载镜像源就好了 npm config set registry https://registry.npmmirror…

基于STM32开发的智能电能监测系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家庭电能监测工业用电管理常见问题及解决方案 常见问题解决方案结论 1. 引言 智能电能监测系统通过实时采集电流、电压等电力参数&#xff0c;计算电能消耗&…

Java项目打包部署到服务器的详细教程

摘要&#xff1a;本文将详细介绍如何将Java项目打包成可执行文件&#xff0c;并将其部署到服务器上。通过本文的学习&#xff0c;你将掌握Java项目打包和部署的整个过程。 一、准备工作 开发环境&#xff1a;本文以IntelliJ IDEA为例&#xff0c;其他IDE同理。 服务器&#x…

mysql数据存储问题

目录 MySQL数据存储基础 MySQL数据存放位置 InnoDB存储引擎介绍 Mermaid图表&#xff1a;InnoDB存储引擎数据文件结构 表空间结构详解 组成要素 组织方式 页内组织 性能影响 Mermaid图表&#xff1a;表空间的层次化结构和页内组织 InnoDB行格式详解 行格式类型 Co…

Nginx异常关闭之中了挖矿病毒kswapd0

问题描述&#xff1a;系统突然无法访问了&#xff0c;登录服务器看了一下是因为Nginx服务关闭&#xff0c;重启后过了几天仍然异常关闭 系统&#xff1a;CentOS 7&#xff0c;Nginx 1.20 尝试解决过程&#xff1a;1、查询nginx/logs/error.log、系统日志&#xff0c;都没有查…