Leetcode - 136双周赛

news2025/4/7 21:08:28

目录

一,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++;
                else
                    cnt += 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++;
                else
                    cnt += grid[i][m/2]*2;//回文时1的个数
            }
        }
        return ans + (tmp > 0 ? tmp : cnt%4);
    }
}

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

本题就是一个换根dp,我们把标记奇数节点需要1时刻,标记偶数节点需要2时刻当成边权,这时题目要求的就变成了将每一个节点当成根节点时的最大深度(也就是树的高度)。如果暴力的话,需要O(n^2)的时间复杂度,会超时,所以需要使用换根dp。

换根dp,基本思路:

  1. 选择一个根节点:首先选择一个节点作为树的根节点,然后从这个根节点开始进行dfs。

  2. 第一次dfs:以选择的根节点开始,计算所有节点在当前根节点下的相关信息(如子树大小、子树内某些路径的和等)

  3. 换根操作:然后,我们需要遍历每个节点,将树的重心从一个节点移动到另一个相邻的节点,并更新相关信息。这一步是换根DP的核心,它依赖于第一次dfs的结果来快速计算新的根节点下的信息。

  4. 更新和记录结果:在换根的过程中,对于每个新的根节点,我们都会计算或更新需要的结果,并记录下来。

对于本题来说,我们使用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);
            }
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1987889.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

springboot招聘管理系统-计算机毕业设计源码26241

摘 要 随着企业的发展和竞争的加剧&#xff0c;人才招聘成为企业人力资源管理中的重要环节。为了提高招聘效率、降低招聘成本&#xff0c;同时提升招聘过程的透明度和公平性&#xff0c;设计并实现一款基于 SpringBoot 的招聘管理系统具有重要的现实意义。 本系统旨在提供一个全…

【MySQL】MySQL常见命令大全

目录 前言一、DQL二 、DML(数据操作语言)部分2.1 插入数据&#xff1a;2.2 更新数据:2.3 删除数据&#xff1a;2.4 创建 create 三、修改 alter四、删除 drop五、表的复制六、常见数据类型 前言 大家好&#xff0c;不知道前面的20题大家写的怎么样&#xff0c;前面分享的20题是…

数据库技术如何增强 AI 大模型?来直播间同拓数派开启探索之旅!

如今&#xff0c;大模型应用正以前所未有的速度改变着各个行业。从自然语言处理、计算机视觉到多模态任务的解决方案&#xff0c;AI 技术已经成为推动业务创新的核心力量。然而&#xff0c;大模型的训练和推理需要处理大量高维度的向量数据&#xff0c;传统数据库在面对这些需求…

3.串口(UART)

串口理论部分可看51部分&#xff1a;链接 数据帧 帧头(2字节&#xff0c;例如AA、BB) 数据长度&#xff08;2字节&#xff09; 数据 CRC16校验&#xff08;2字节&#xff09; 帧尾&#xff08;2字节&#xff09; 代码编写 串口一发送命令控制LED灯(PB5、PE5) LED灯、串口、…

python:基于YOLO框架和遥感图像的目标检测

作者&#xff1a;CSDN _养乐多_ 本文将介绍如何通过YOLO框架和遥感图像进行目标检测的代码。 文章目录 一、数据集下载与格式转换1.1 NWPU VHR-10&#xff08;73.1 MB&#xff09;1.2 DIOR&#xff08;7.06 GB&#xff09;1.3 配置data.yaml 二、训练三、训练结果 一、数据集…

揭秘 NKAbuse:一种滥用 NKN 协议的新型多平台威胁

写在前面的话 在卡巴斯基全球紧急响应团队&#xff08;GERT&#xff09;和GReAT处理的一次网络安全事件应急响应过程中&#xff0c;研究人员发现了一个名为“KNAbuse”的新型多平台网络威胁。这款恶意软件利用了NKN技术在对等节点之间进行数据交换&#xff0c;功能上相当于一种…

NC 合并k个已排序的链表

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 合并 k 个升序…

Ubuntu系统安装docker和docker-compose并解决拉取镜像超时失败问题

安装docker 1、添加Docker官方的GPG密钥: curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add - 2、添加docker的软件源 sudo add-apt-repository "deb [archamd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release …

嵌入式软件--C语言高级 DAY 8 函数

函数是C语言尤为重要的知识点&#xff0c;再嵌入式的学习过程中&#xff0c;对51和32的单片机的学习是重中之重。 一、函数的基本概念 1.介绍 函数是一种可重复使用的代码块&#xff0c;用于执行特定的任务或操作。 函数允许我们将代码逻辑组织成独立的单元&#xff0c;从而…

Python酷库之旅-第三方库Pandas(069)

目录 一、用法精讲 276、pandas.Series.dt.is_quarter_start属性 276-1、语法 276-2、参数 276-3、功能 276-4、返回值 276-5、说明 276-6、用法 276-6-1、数据准备 276-6-2、代码示例 276-6-3、结果输出 277、pandas.Series.dt.is_quarter_end属性 277-1、语法 …

知乎ip地址怎么改到别的城市去

知乎全面上线显示用户IP属地功能&#xff0c;这意味着用户可以在知乎上看到其他用户发布内容时的IP属地信息&#xff0c;这有助于增加信息的透明度和减少误解&#xff0c;但同时也容易暴露其隐私。有时出于保护隐私、避免地域限制或参与特定话题讨论的需求&#xff0c;我们可能…

【实战】文件加密器进行逆向

前言 实战可以大大提高自己&#xff0c;学习技术的目的就是能够在实战中运用。 本次实战与实际息息相关&#xff0c;该软件具有加密某文件的功能。 界面还挺好看的&#xff0c;功能很简单&#xff0c;输入文件和PIN(4位&#xff09;进加解密。 这是被加密的文件 需要将其进行…

经纬恒润荣获小米汽车优秀质量奖!

小米SU7上市已超百天&#xff0c;在品质经过客户严选的同时&#xff0c;产量与交付量屡创新高&#xff0c;6-7月连续两个月交付量均超过10000台。为奖励对小米汽车质量和交付做出卓越贡献的合作伙伴团队及个人&#xff0c;小米向质量表现突出的供应商授予了优秀质量奖。经纬恒润…

第22课 Scratch入门篇:猫咪跑步(超长背景实现方法)

猫咪跑步(超长背景实现方法) 故事背景&#xff1a; 在广阔的草坪上有一只小猫&#xff0c;按下键盘的左右键&#xff0c;小猫不停的奔跑。。。 程序原理&#xff1a; 这个小猫的奔跑&#xff0c;实际是背景的移动&#xff0c;上节课我们通过多个图片直接的切换&#xff0c;今天…

深入理解 RDMA 的软硬件交互机制

作者&#xff1a;羽京 一、前言 随着数据中心的飞速发展&#xff0c;高性能网络不断挑战着带宽与时延的极限&#xff0c;网卡带宽从过去的 10 Gb/s 、25 Gb/s 到如今的 100 Gb/s、200 Gb/s 再到下一代的 400Gb/s 网卡&#xff0c;其发展速度已经远大于 CPU 发展的速度。 为了…

谷歌25亿美金收购Character AI的幕后故事

在科技领域中&#xff0c;并购交易无疑是推动技术发展的重要手段之一。最近&#xff0c;谷歌以25亿美金的对价收购了Character AI&#xff0c;这一交易的方式和细节引起了广泛关注。本文将详细解析谷歌这一奇葩交易方式&#xff0c;探讨其背后的动机和影响。 一、交易背景 1.…

计算机毕业设计Python民宿可视化分析 民宿推荐系统 随机森林预测算法 民宿爬虫 酒店爬虫 大数据毕业设计 Django Vue.js 机器学习 深度学习

《Python民宿可视化与预测系统》开题报告 一、选题背景及研究意义 1.1 选题背景 民宿作为一种新型的住宿方式&#xff0c;近年来在全球范围内迅速崛起&#xff0c;尤其在旅游行业发达的国家和地区更是受到广大游客的青睐。民宿不仅提供了更加个性化和接地气的住宿体验&#…

高校综合管理数据库中有以下几个关系

inner join&#xff1a;理解为“有效连接”&#xff0c;两张表中都有的数据才会显示 left join&#xff1a;理解为“有左显示”&#xff0c;比如on a.fieldb.field&#xff0c;则显示a表中存在的全部数据及a、b中都有的数据&#xff0c;a中有、b中没有的数据以null显示 right j…

智慧水务项目(五)django(drf)+angular 18 配置REST_FRAMEWORK

一、说明 建立了几个文件 二、一步一步来 1、建立json_response.py 继承了 Response&#xff0c; 一共三个函数&#xff0c;成功、详情&#xff0c;错误 from rest_framework.response import Responseclass SuccessResponse(Response):"""标准响应成功的返回…

影响LabVIEW工作效率的因素有哪些

影响LabVIEW工作效率的因素可以分为多个方面&#xff0c;涵盖硬件、软件、开发环境和编程习惯等。以下是一些常见的影响因素&#xff1a; 1. 硬件因素 处理器性能&#xff1a;处理器的速度和核心数量对LabVIEW程序的执行效率有很大影响。 内存大小&#xff1a;足够的内存可以保…