Leetcode - 136双周赛
目录
一,3238. 求出胜利玩家的数目
二,3239. 最少翻转次数使二进制矩阵回文 I
三,3240. 最少翻转次数使二进制矩阵回文 II
四,3241. 标记所有节点需要的时间
一,3238. 求出胜利玩家的数目
本题直接暴力求解,使用一个二维数组存储每个玩家获得每一种颜色球的数量,在检查玩家i是否有一种颜色的球的数量大于 i ,代码如下:
class Solution {public int winningPlayerCount(int n, int[][] pick) {int[][] cnt = new int[n][11];for(int[] x : pick){cnt[x[0]][x[1]]++;}int ans = 0;for(int i=0; i<n; i++){for(int j=0; j<11; j++){if(cnt[i][j] > i){ans++;break;}}}return ans;}
}
二,3239. 最少翻转次数使二进制矩阵回文 I
本题求最少翻转次数且所有行(row)或 所有列(col)是回文的,我们可以分别求两者回文的翻转次数,最后返回最小值,代码如下:
class Solution {public int minFlips(int[][] grid) {int n = grid.length, m = grid[0].length;int row = 0;for(int i=0; i<n; i++){for(int j=0; j<m/2; j++){if(grid[i][j] != grid[i][m-j-1]){row++;}}}int col = 0;for(int j=0; j<m; j++){for(int i=0; i<n/2; i++){if(grid[i][j] != grid[n-i-1][j]){col++;}}}return Math.min(row, col);}
}
三,3240. 最少翻转次数使二进制矩阵回文 II
本题要求所有的行和列都是回文的且矩阵中1的数目可以被4整除,画个图理解一下:
特殊情况——行为奇(n%2==1),列为奇(m%2==1)
- 如果行列都为奇数,那么中心点一定为0(如果它是1,那么矩阵中1的个数一定是奇数,就不满足整除4的条件)
我们需要 tmp 和 cnt 分别统计正中间一列和正中间一列中不回文的对数,以及回文时1的个数。
- 如果cnt%4 = 0,那么我们只需要额外操作 tmp 次,将不回文的全改成0就行
- 如果cnt%4 != 0,那么cnt%4就只能等于2(统计的都是对称的,即一定是偶数),如果tmp>0,只需要操作 tmp 次,1次将0->1,tmp-1次将1->0(可以获得2个1);如果 tmp = 0,那么只需要操作cnt%4次(即2次),将多出来的1->0
总上所述:tmp > 0,额外操作 tmp 次;否则,操作 cnt%4 次
class Solution {public int minFlips(int[][] grid) {int n = grid.length, m = grid[0].length;int ans = 0;for(int i=0; i<n/2; i++){for(int j=0; j<m/2; j++){int cnt = grid[i][j] + grid[n-i-1][j] + grid[i][m-j-1] + grid[n-i-1][m-j-1];ans += Math.min(4-cnt, cnt);//Math.min(0->1, 1->0)}}int tmp = 0, cnt = 0;if(n%2==1 && m%2==1){ans += grid[n/2][m/2];//中心点必须为0}if(n%2 == 1){for(int j=0; j<m/2; j++){if(grid[n/2][j] != grid[n/2][m-j-1])//不回文的对数tmp++;elsecnt += grid[n/2][j]*2;//回文时1的个数}}if(m%2 == 1){for(int i=0; i<n/2; i++){if(grid[i][m/2] != grid[n-i-1][m/2])//不回文的对数tmp++;elsecnt += grid[i][m/2]*2;//回文时1的个数}}return ans + (tmp > 0 ? tmp : cnt%4);}
}
四,3241. 标记所有节点需要的时间
本题就是一个换根dp,我们把标记奇数节点需要1时刻,标记偶数节点需要2时刻当成边权,这时题目要求的就变成了将每一个节点当成根节点时的最大深度(也就是树的高度)。如果暴力的话,需要O(n^2)的时间复杂度,会超时,所以需要使用换根dp。
换根dp,基本思路:
-
选择一个根节点:首先选择一个节点作为树的根节点,然后从这个根节点开始进行dfs。
-
第一次dfs:以选择的根节点开始,计算所有节点在当前根节点下的相关信息(如子树大小、子树内某些路径的和等)
-
换根操作:然后,我们需要遍历每个节点,将树的重心从一个节点移动到另一个相邻的节点,并更新相关信息。这一步是换根DP的核心,它依赖于第一次dfs的结果来快速计算新的根节点下的信息。
-
更新和记录结果:在换根的过程中,对于每个新的根节点,我们都会计算或更新需要的结果,并记录下来。
对于本题来说,我们使用dfs求以0为根节点最大深度,同时求出子树 x 的最大深度mx1,次大深度mx2,以及最大深度对应的子树节点my(当前根节点下的相关信息)。
然后进行换根操作,对于每一个节点 x,它们的答案有两种可能:
- 子树 x 的最大深度
- x 往上走到某个节点再拐到其他子树
画个图理解一下:
代码如下:
class Solution {int[] ans;int[][] node;public int[] timeTaken(int[][] edges) {int n = edges.length + 1;List<Integer>[] g = new ArrayList[n];Arrays.setAll(g, e->new ArrayList<>());for(int[] e : edges){int x = e[0], y = e[1];g[x].add(y);g[y].add(x);}ans = new int[n];node = new int[n][3];dfs(0, -1, g);reroot(0, -1, 0, g);return ans;}int dfs(int x, int fa, List<Integer>[] g){int mx1 = 0, mx2 = 0, my = 0;for(int y : g[x]){if(y == fa) continue;int depth = dfs(y, x, g) + 2 - y%2;if(mx1 < depth){mx2 = mx1;mx1 = depth;my = y;}else if(mx2 < depth){mx2 = depth;}}node[x][0] = mx1;//最大深度node[x][1] = mx2;//次大深度node[x][2] = my;//最大深度对应的子树节点return mx1;}void reroot(int x, int fa, int from, List<Integer>[] g){ans[x] = Math.max(from, node[x][0]);for(int y : g[x]){if(y != fa){int up1 = from + 2 - x%2;//在 x 处不拐弯int up2 = (y == node[x][2] ? node[x][1] : node[x][0]) + 2 - x%2;//在 x 处拐弯reroot(y, x, Math.max(up1, up2), g);}}}
}
相关文章:

Leetcode - 136双周赛
目录 一,3238. 求出胜利玩家的数目 二,3239. 最少翻转次数使二进制矩阵回文 I 三,3240. 最少翻转次数使二进制矩阵回文 II 四,3241. 标记所有节点需要的时间 一,3238. 求出胜利玩家的数目 本题直接暴力求解&#x…...
SQLite ORDER BY 语句
SQLite ORDER BY 语句 SQLite 的 ORDER BY 语句用于对查询结果进行排序。排序可以是升序(ASC)或降序(DESC)。默认情况下,如果不指定排序方式,ORDER BY 会以升序对结果进行排序。 语法 SQLite ORDER BY 语…...
MTK Android12 系统中应用加载 .so 文件的问题分析
在本篇博客中,我将详细总结在 Android 12 系统上进行的几个实验,包括如何加载自定义 JAR 文件、如何解压和确认 .so 文件,以及如何验证系统报错提示。本文将介绍使用 PathClassLoader 和 DexClassLoader 动态加载类的实验,分析系统报错信息,并最终得出结论。 推荐:《Andr…...

bpmn简单使用(制作流程图)
1、先下载依赖,下面是我下载的版本 "bpmn-io/properties-panel": "^3.23.0", "bpmn-js": "^17.9.1", "bpmn-js-properties-panel": "^5.6.1", "camunda-bpmn-moddle": "^7.0.1",…...
【算法模板】算竞技巧:Python对拍数据生成
在计算机编程竞赛中,对拍(Testlib)是一种验证程序正确性的方法。它通常用于检查一个程序的输出是否与另一个程序的输出一致,以确保程序的正确性。 对拍程序 【算法模板】算竞技巧:对拍全解_算法竞赛对拍-CSDN博客 #i…...

计算机基本理论与程序运行原理概述
目录 计算机的基本表示方法 计算机的组成 程序运行的原理 指令执行的流水线 编译原理 个人理解 面试题总结 计算机的基本表示方法 计算机系统使用高、低电平来表示逻辑1和0。数据在计算机中的存储、传输和处理均以二进制形式进行。数据通过总线作为电信号进行传输&…...

SpringBoot中的server.context-path
目录 一、问题引入 二、代码片段展示 2.1.接口层 2.2.application.properties 三、问题分析 3.1.server.context-path 作用 3.2.正确展示 四、HTTP请求响应码简介 4.1.响应码参考来源 4.2.源码示例 4.2.1.源码总述 4.2.2.正常情况——2XX: generally "OK&…...

AI绘画绘画 Stable Diffusion ,从零开始轻松变现,AI绘画副业创收指南,一天一个AI帮你赚钱小技巧!
大家好,我是灵魂画师向阳 通过长达几个月的AI绘画Stable Diffusion 系统教程,相信大家已经对AI绘画有了一个大概的认知。最近就有很多粉丝总是问我,AI绘画学会后如何进行变现,或者是做副业呢? 那今天我就分享一些目前…...

阿里云镜像站,提供了各种第三方镜像地址
阿里云提供了各项镜像缓存地址,对于很多国外服务的地址,通过阿里云缓存的地址去下载,速度会非常快。 如下,打开阿里云官方网站: 进入“镜像站”,如下图所示: 有我们常用的 npm、maven、操作系统…...

stm32入门学习11-硬件I2C和MPU
(一)I2C硬件电路 stm32内部有I2C的硬件电路,我们可以使用stm32的标准库函数来实现I2C,这可以为我们减少对软件资源的占用 I2C硬件电路常用的标准库函数 void I2C_Init(I2C_TypeDef* I2Cx, I2C_InitTypeDef* I2C_InitStruct); /…...
如何在C++、PHP、GO中使用AI生成PPT API接口
在当今快节奏的商业环境中,演示文稿的制作不仅需要快速,还需要具有吸引力和专业性。AI生成PPT API 服务提供了一种创新的解决方案,能够根据用户提供的内容自动生成演示文稿,极大地提高了效率和质量。本文将详细介绍AI生成PPT的优势…...

力扣面试150 逆波兰表达式求值 栈 模拟栈
Problem: 150. 逆波兰表达式求值 👨🏫 参考题解 class Solution {//纯数组模拟栈实现(推荐) 3 ms 36 MBpublic static int evalRPN(String[] tokens) {int[] numStack new int[tokens.length / 2 1];int index 0;for (String s : tokens) {swit…...

动手学深度学习V2每日笔记(深度卷积神经网络AlexNet)
本文主要参考沐神的视频教程 https://www.bilibili.com/video/BV1h54y1L7oe/spm_id_from333.788.recommend_more_video.0&vd_sourcec7bfc6ce0ea0cbe43aa288ba2713e56d 文档教程 https://zh-v2.d2l.ai/ 本文的主要内容对沐神提供的代码中个人不太理解的内容进行笔记记录&…...
室内定位:紧耦合的学习惯性里程 (TLIO)
a### TLIO论文解读:紧耦合的学习惯性测程 (TLIO) 在惯性测量单元 (IMU) 领域,如何在短时间内精确地估计位置和姿态一直是一个挑战。最近,论文《TLIO: Tight Learned Inertial Odometry》提出了一种创新的方法,通过将深度学习与扩展卡尔曼滤波器 (EKF) 紧密结合,来解决这一…...
【面试之算法篇】寻找二叉树中两个节点的最低公共祖先
题目 给定一个树的根节点root和两个子节点a,b,返回二叉树中两个节点的最低公共祖先。二叉树每个节点的值都是不同的整数 10060 12040 null 4 74和7的最低公共祖先是120,60和40的最低公共祖先是60 思路 两个节点的祖先会有多个,只有是祖先的节点才有可能会是最低公共…...
使用Unity开发编辑系统时复制物体的一些细节问题
首先是复制一个GameObject时组件中的变量内容的复制问题,这个在Unity复制对象时让私有变量也被复制的简单方法这篇博客里面做了说明,但是其实还有一个问题,就是有些时候需要被复制的物体在刚创建出来的时候需要自动执行一些操作,这…...

【C++】模版初阶+STL简介
🚀个人主页:奋斗的小羊 🚀所属专栏:C 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 前言💥1、函数模版💥1.1 函数模板概念💥1.2 函数模板格式💥1…...
Vue3中的toRef和toRefs的区别和用法
刚做了Ref和Reactive区别及使用方法笔记,再来总结一下,toRef 和 toRefs 的作用、用法、区别 1、作用和区别 toRef 和 toRefs 可以用来复制 reactive 里面的属性然后转成 ref,而且它既保留了响应式,也保留了引用,也就…...
【docker快捷部署系列一】docker快速入门,安装docker,解决运行Docker Quickstart Terminal出错
1、docker快速入门 视频链接 知识点概述 docker是轻量级虚拟机image是镜像 相当于虚拟机快照container是容器,相当于运行起来的虚拟机程序Dockerfile 是创建docker镜像的自动化脚本docker-compose 是一个定义和运行多个容器命令的工具,包括运行Docker…...

vulnhub靶机实战_DC-8
一、靶机下载 靶机下载链接汇总:https://download.vulnhub.com/使用搜索功能,搜索dc类型的靶机即可。本次实战使用的靶机是:DC-8系统:Debian下载链接:https://download.vulnhub.com/dc/DC-8.zip 二、靶机启动 下载完…...

wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
PostgreSQL——环境搭建
一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在࿰…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...