Leetcode - 周赛404

目录

一,3200. 三角形的最大高度

二,3201. 找出有效子序列的最大长度 I

三,3202. 找出有效子序列的最大长度 II

四,3203. 合并两棵树后的最小直径


一,3200. 三角形的最大高度

本题直接模拟,分别计算一下红蓝红和蓝红蓝的最大高度。

代码如下:

class Solution {
    public int maxHeightOfTriangle(int red, int blue) {
        return Math.max(make(red, blue), make(blue, red));
    }
    int make(int a, int b){
        int i = 1;
        while(true){
            if(i%2==1){
                a -= i;
            }else{
                b -= i;
            }
            if(a < 0 || b < 0) return i-1;
            i++;
        }
    }
}

二,3201. 找出有效子序列的最大长度 I

本题讲个简单的做法,(a+b)%2 = (a%2 + b%2)%2,就是看相邻的两个数是奇奇,偶偶,还是奇偶,所以可以分别求这三种情况,即奇数的个数,偶数的个数,以及奇偶相间的个数(这里直接贪心,不用分奇偶奇还是偶奇偶,直接看第一个数是奇数还是偶数就行),代码如下:

class Solution {
    public int maximumLength(int[] nums) {
        int sum = 0, k = -1, cnt = 1;
        for(int i=0; i<nums.length; i++){
            nums[i] %= 2;
            if(k == -1) k = nums[i];
            else{
                if((k^nums[i])==1){
                    k ^= 1;
                    cnt++;
                }
            }
            sum += nums[i];
        }
        return Math.max(Math.max(sum, nums.length-sum), cnt);
    }
}

三,3202. 找出有效子序列的最大长度 II

本题无法使用dfs记忆化来做,会超时,那么我们如何来写这道题呢?有这样一个性质,假设(a + b)%k = (b + c)%k,可以推出 (a + b - (b + c))%k = 0,(a - c)%k = 0,即a%k = c%k。结合本题题意,如果将nums中的所有值 % k,可以得出子序列中奇数项都相同,偶数项也都相同。

定义f[x][y]:以x,y结尾的最长子序列(这里的x,y都是nums[i]%k)。由上述结论可以得出下面的递推公式 f[x][y] = f[y][x] + 1,代码如下:

class Solution {
    public int maximumLength(int[] nums, int k) {
        int ans = 1;
        int[][] f = new int[k][k];
        for(int x : nums){
            x %= k;
            for(int y=0; y<k; y++){
                f[y][x] = f[x][y] + 1;
                ans = Math.max(f[y][x], ans);
            }
        }
        return ans;
    }
}

四,3203. 合并两棵树后的最小直径

写本题需要推出一个结论,就是该题的最长路径长度一定是e1的直径,e2的直径,e1的直径/2 + e2的直径/2 + 1 (即两个树直径的中点相连)这三者的最大值。

可以由反证法证明为啥是两个树直径的中点相连,存在两种情况:

  • 如果存在一个点不在e1或e2的直径上,那么以它相连得到的最长直径,一定要先走到直径上,所以它一定比两个树直径的中点相连多走一段距离
  • 如果存在一个点在e1或e2的直径上但是不是中点,显而易见,以它相连得到的最长直径一定要大于两个树直径的中点相连

得出结论后,我们要做的就是求出两个图的直径,代码如下:

class Solution {
    public int minimumDiameterAfterMerge(int[][] e1, int[][] e2) {
        int s1 = inital(e1);
        int s2 = inital(e2);
        return Math.max(Math.max(s1, s2), (s1+1)/2 + (s2+1)/2 + 1);
    }
    int res;
    int inital(int[][] edge){
        int n = edge.length;
        List<Integer>[] g = new ArrayList[n+1];
        Arrays.setAll(g, e->new ArrayList<>());
        for(int[] e : edge){
            int x = e[0], y = e[1];
            g[x].add(y);
            g[y].add(x);
        }
        res = 0;
        dfs(0, -1, g);
        return res;
    }
    //求直径
    int dfs(int x, int fa, List<Integer>[] g){
        int maxLen = 0;
        for(int y : g[x]){
            if(y != fa){
                int t = dfs(y, x, g)+1;
                res = Math.max(res, maxLen + t);
                maxLen = Math.max(maxLen, t);
            }
        }
        return maxLen;
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

极简通俗VAE

一、VAE 背景&#xff1a;VAE什么变分自编码器&#xff0c;听起来起名都头大&#xff0c;用大白话告诉你。 把一个复杂图片压缩成两个参数&#xff0c;用这个参数采样再复原。 这个简单的东西是两个参数&#xff0c;均值和方差&#xff0c;用&#xff08;0&#xff0c;1&…

C语言_练习题

求最小公倍数 思路&#xff1a;假设两个数&#xff0c;5和7&#xff0c;那么最小至少也要7吧&#xff0c;所以先假定最小公倍数是两个数之间较大的&#xff0c;然后看7能不能同时整除5和7&#xff0c;不能就加1继续除 int GetLCM(int _num1, int _num2) {int max _num1>_n…

web学习笔记(八十)

目录 1.小程序实现微信一键登录 2. 小程序的授权流程 3.小程序配置vant库 4.小程序配置分包 5.小程序配置独立分包 6.小程序分包预下载 1.小程序实现微信一键登录 要先实现小程序一键登录首先我们需要给按钮设置一个绑定事件&#xff0c;然后在绑定事件内部通过wx.login…

phpexcel导入导出

前言&#xff1a; 如果你到处的excel软件打开有问题&#xff0c;下面有介绍解决办法 导入 1. composer init 初始化 2. 下载phpspreadsheet 这里需要注意php版本&#xff0c;需要大于7.2 composer require phpoffice/phpspreadsheet3. 编写代码 <?php require vendo…

Vue3+.NET6前后端分离式管理后台实战(二十七)

1&#xff0c;Vue3.NET6前后端分离式管理后台实战(二十七)

017-GeoGebra基础篇-微积分函数求解圆弧面积问题

基础篇慢慢的走进尾声&#xff0c;今天给大家带来一个小项目&#xff0c;是关于高中数学微积分部分的展示&#xff0c;这个项目主要包含了函数的介绍、函数与图形绘制的区别、区域函数图像的绘制、积分函数的应用、动态文本的调用、嵌套滑动条的应用等等&#xff0c;以及其他常…

代理模式的实现

1. 引言 1.1 背景 代理模式&#xff08;Proxy Pattern&#xff09;是一种常用的设计模式&#xff0c;它允许通过一个代理对象来控制对另一个对象的访问。在面向对象编程的框架中&#xff0c;代理模式被广泛应用&#xff0c;尤其在Spring框架的AOP&#xff08;面向切面编程&am…

Python的招聘数据分析与可视化管理系统-计算机毕业设计源码55218

摘要 随着互联网的迅速发展&#xff0c;招聘数据在规模和复杂性上呈现爆炸式增长&#xff0c;对数据的深入分析和有效可视化成为招聘决策和招聘管理的重要手段。本论文旨在构建一个基于Python的招聘数据分析与可视化管理系统。 该平台以主流招聘平台为数据源&#xff0c;利用Py…

arm架构安装chrome

在ARM架构设备上安装谷歌软件或应用通常涉及到几个步骤&#xff0c;这取决于你要安装的具体谷歌产品&#xff0c;比如谷歌浏览器、Google Play服务或者是其他谷歌开发的软件。下面我会给出一些常见的指导步骤&#xff0c;以安装谷歌浏览器为例&#xff1a; 在Linux ARM64上安装…

平价蓝牙耳机推荐有哪些?四大超值平价蓝牙耳机品牌盘点

市面上的蓝牙耳机品牌繁多&#xff0c;价格差异巨大&#xff0c;对于预算有限但又不想牺牲音质和使用体验的消费者来说&#xff0c;寻找到既平价又性能出色的蓝牙耳机无疑是一项挑战&#xff0c;那么在平价蓝牙耳机推荐有哪些&#xff1f;面对这个疑问&#xff0c;作为真无线蓝…

【图解大数据技术】Hive、HBase

【图解大数据技术】Hive、HBase Hive数据仓库Hive的执行流程Hive架构数据导入Hive HBaseHBase简介HBase架构HBase的列式存储HBase建表流程HBase数据写入流程HBase数据读取流程 Hive Hive是基于Hadoop的一个数据仓库工具&#xff0c;Hive的数据存储在HDFS上&#xff0c;底层基于…

CSS - 深入理解选择器的使用方式

CSS基本选择器 通配选择器元素选择器类选择器id 选择器 通配选择器 作用&#xff1a;可以选中所有HTML元素。语法&#xff1a; * {属性名&#xff1b;属性值; }举例&#xff1a; /* 选中所有元素 */ * {color: orange;font-size: 40px; }在清除样式方面有很大作用 元素选择器…

实现桌面动态壁纸(二)

目录 前言 一、关于 WorkerW 工作区窗口 二、关于窗口关系 2.1 窗口以及窗口隶属关系 2.2 桌面管理层窗口组分简析 2.3 厘清两个概念的区别 2.4 关于设置父窗口 三、编写代码以供在 Vista 上实现 3.1 方法二&#xff1a;子类化并自绘窗口背景 四、初步分析桌面管理层…

【音视频 | RTSP】RTSP协议详解 及 抓包例子解析(详细而不赘述)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

免密ssh和自定义服务器名字【远程连接服务器】

免密ssh和自定义服务器名字【远程连接服务器】 免密ssh和自定义服务器名字【远程连接服务器】服务器添加本地公钥ssh-copy-id使用别名登录config 免密ssh和自定义服务器名字【远程连接服务器】 原理 实现免密登录需要 本地的公钥id_rsa.pub放在服务器上的 authorized_keys 文件…

NTP协议格式解析

1. NTP时间戳格式 SNTP使用在RFC 1305 及其以前的版本所描述标准NTP时间戳的格式。与因特网标准标准一致&#xff0c; NTP 数据被指定为整数或定点小数&#xff0c;位以big-endian风格从左边0位或者高位计数。除非不这样指定&#xff0c;全部数量都将设成unsigned的类型&#…

边缘概率密度、条件概率密度、边缘分布函数、联合分布函数关系

目录 二维随机变量及其分布离散型随机变量连续型随机变量边缘分布边缘概率密度举例边缘概率密度 条件概率密度边缘概率密度与条件概率密度的区别边缘概率密度条件概率密度举个具体例子 参考资料 二维随机变量及其分布 离散型随机变量 把所有的概率&#xff0c;都理解成不同质量…

【Rust入门】生成随机数

文章目录 前言随机数库rand添加rand库到我们的工程生成一个随机数示例代码 总结 前言 在编程中&#xff0c;生成随机数是一种常见的需求&#xff0c;无论是用于数据分析、游戏开发还是模拟实验。Rust提供了强大的库来帮助我们生成随机数。在这篇文章中&#xff0c;我们将通过一…

huggingface笔记:gpt2

0 使用的tips GPT-2是一个具有绝对位置嵌入的模型&#xff0c;因此通常建议在输入的右侧而不是左侧填充GPT-2是通过因果语言建模&#xff08;CLM&#xff09;目标进行训练的&#xff0c;因此在预测序列中的下一个标记方面非常强大 利用这一特性&#xff0c;GPT-2可以生成语法连…

并发编程中常见的锁

一、锁的分类 1.1 悲观锁和乐观锁 乐观锁&#xff1a; 定义: 假设在绝大多数情况下&#xff0c;对共享资源的访问是不会发生冲突的,所以不会对资源上锁。 实现方式&#xff1a;当线程要对资源进行更新时&#xff0c;它会先获取资源的版本号或者标识符&#xff0c;并在执行更新…