LeetCode---426周赛

news2025/1/16 7:33:52

题目列表

3370. 仅含置位位的最小整数

3371. 识别数组中的最大异常值

3372. 连接两棵树后最大目标节点数目 I

3373. 连接两棵树后最大目标节点数目 II

一、仅含置位位的最小整数

题目要求我们返回二进制数位全为1,且大于 n 的最小的整数,我们可以直接从小到大枚举答案,也可以直接计算出答案,比如 5 的二进制为 101,返回 111,即7,8的二进制为1000,返回1111,即15,也就是说我们返回的值的二级制位数等于 n 的二进制位数,即返回值为 (1<<bit_length)-1,其中 bit_length 为 n 的二进制位数,代码如下

// 1、模拟
class Solution {
public:
    int smallestNumber(int n) {
        int ans = 0;
        for(int i = 0; i < 32; i++){
            if(ans >= n) return ans;
            ans |= 1 << i;
        }
        return -1;
    }
};

// 2、直接按公式计算
class Solution {
public:
    int smallestNumber(int n) {
        // __builtin_clz 用来计算 n 的二进制前导零的个数
        return (1 << (32 - __builtin_clz(n))) - 1;
    }
};

二、识别数组中的最大异常值

首先,我们要先清楚数组中元素的关系,设异常值为 x,特殊值为 y,则 x + 2y = sum,sum为数组和,根据等式的关系,我们可以枚举异常值 x,然后看是否存在一个元素 y = (sum - x)/2 (可以用哈希表记录每个元素的出现次数) 如果存在,则 y 可以为异常值,取 max 即可,代码如下

class Solution {
public:
    int getLargestOutlier(vector<int>& nums) {
        int n = nums.size(), sum = 0, ans = INT_MIN;
        unordered_map<int,int>mp;
        for(auto x:nums) mp[x]++, sum += x;
        for(auto x:nums){
            if((sum - x) % 2 == 0){ // 必须是偶数
                int y = (sum - x) / 2;
                if(mp.count(y) && (x != y || mp[x] > 1)){ // 可能会出现 x = y 的情况,此时 mp[x] > 1
                    ans = max(ans, x);
                }
            }
        }
        return ans;
    }
};

三、连接两棵树后最大目标结点个数 I

首先,我们来思考一棵树中每个结点的最大目标结点个数如何计算?由于数据范围比较小,我们可以给每一个结点都用 dfs 计算一次目标节点个数。

那么如果两个树要连接在一起呢?我们需要考虑枚举哪两个结点连接的问题吗?不需要

1、对于Tree1,根据题目中目标节点的定义,我们肯定是将需要计算的结点当作连接的结点,这样才能让该结点到Tree2的结点的边数尽可能少,从而让目标节点的个数尽可能的多

2、对Tree2,根据(1),其实问题就变成了Tree2中哪个结点的目标结点的个数最多,只不过距离变为 k - 1,可以用相同的方法计算出每个结点的目标节点的个数,然后取max即可

代码如下

class Solution {
    vector<int> getTargetNodes(vector<vector<int>>& edges, int k){
        int n = edges.size();
        vector<vector<int>> g(n + 1);
        for(auto e : edges){
            g[e[0]].push_back(e[1]);
            g[e[1]].push_back(e[0]);
        }
        int i;
        vector<int> ret(n + 1);
        function<void(int,int,int)> dfs = [&](int x, int fa, int d){
            if(d <= k) {
                ret[i]++;
                for(int y : g[x]){
                    if(y != fa){
                        dfs(y, x, d + 1);
                    }
                }
            }
        };
        for(i = 0; i < n + 1; i++)
            dfs(i, -1, 0);
        return ret;
    }
public:
    vector<int> maxTargetNodes(vector<vector<int>>& edges1, vector<vector<int>>& edges2, int k) {
        int mx = ranges::max(getTargetNodes(edges2, k - 1)); // 由于Tree2需要和Tree1连接,会多出一条边,所以计算目标结点时的 k 需要减一
        auto ans = getTargetNodes(edges1, k);
        for(auto & x : ans) x += mx;
        return ans;
    }
};

四、连接两棵树后最大目标结点个数 II

注意:这题的题目和第三题并不一样,一定要仔细读题,但是思路大题相同。

题目说结点之间的距离为偶数时,互为目标节点,这里我们只用关心奇偶性即可,同时,如果我们手玩一下示例一,就会发现:

所以我们只要对一棵树进行一次 dfs 就能算出该树上所有结点的目标节点的个数,然后依旧是将两棵树分别进行计算即可,代码如下

class Solution {
    vector<int> getCnt(vector<vector<int>>& g){
        int n = g.size();
        vector<int> cnt(2);
        // 距离 0 结点为 偶数 的数字互为目标结点
        // 距离 0 结点为 奇数 的数字互为目标节点
        auto dfs = [&](auto&& dfs, int x, int fa, int d)->void{
            cnt[d]++;
            for(int y: g[x]){
                if(y != fa){
                    dfs(dfs, y, x, d ^ 1);
                }
            }
        };
        dfs(dfs, 0, -1, 0);
        return cnt;
    }
public:
    vector<int> maxTargetNodes(vector<vector<int>>& edges1, vector<vector<int>>& edges2) {
        int n = edges1.size() + 1;
        int m = edges2.size() + 1;
        vector<vector<int>> g1(n), g2(m);
        for(auto e:edges1){
            g1[e[0]].push_back(e[1]);
            g1[e[1]].push_back(e[0]);
        }
        for(auto e:edges2){
            g2[e[0]].push_back(e[1]);
            g2[e[1]].push_back(e[0]);
        }
        vector<int> cnt = getCnt(g1);
        int mx = ranges::max(getCnt(g2));
        vector<int> ans(n, mx);
        auto dfs = [&](auto&& dfs, int x, int fa, int d)->void{
            ans[x] += cnt[d];
            for(int y:g1[x]){
                if(y != fa){
                    dfs(dfs, y, x, d ^ 1);
                }
            }
        };
        dfs(dfs, 0, -1, 0);
        return ans;
    }
};

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

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

相关文章

HTML笔记()蜘蛛纸牌之卡牌拖拽

效果 代码 <!DOCTYPE html> <html><head><style>body{display: flex;justify-content: center;align-items: center;height: 100vh;background-color: #2b2b2b;position: relative;}.card{/*设置卡牌的外观*/width: 150px;height: 200px;background-…

基于springboot校园生活服务平台源码和论文

可做计算机毕业设计JAVA、PHP、爬虫、APP、小程序、C#、C、python、数据可视化、大数据、文案 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一…

C++ 数组与字符串全解析:从基础到应用

目录 数组和字符串 &#xff08;一&#xff09;数组&#xff08;在 C 中&#xff09; 1.一维数组 2.二维数组 &#xff08;二&#xff09;C - style 字符串 &#xff08;三&#xff09;C string 类 数组和字符串 &#xff08;一&#xff09;数组&#xff08;在 C 中&…

Git常用的命令【提交与回退】

git分布式版本控制系统 &#xff08;SVN集中式版本控制系统&#xff09;之间的对比 git有本地仓库和远程仓库&#xff0c;不同的开发人员可以分别提交自己的本地仓库并维护代码的版本控制。 然后多个人员在本地仓库协作的代码&#xff0c;可以提交到远程仓库中做整合。 git本…

JAVA秋招面试题精选-第一天总结

目录 分栏简介&#xff1a; 问题一&#xff1a;订单表每天新增500W条数据&#xff0c;分库分表应该怎么设计&#xff1f; 问题难度以及频率&#xff1a; 问题导向&#xff1a; 满分答案&#xff1a; 举一反三&#xff1a; 问题总结&#xff1a; 问题二&#xff1a;解释…

C—初阶结构体

若是阁下满意的话&#xff0c;能否一键三连呢&#xff01;&#xff01;&#xff01;&#xff01; 结构体基础知识&#xff1a; 概念&#xff1a;结构体是一些值的集合&#xff0c;这些值称为变量&#xff0c;变量可以是不同类型 这里我们再想一下之前的数组&#xff0c;数组是一…

物品识别 树莓派 5 YOLO v5 v8 v10 11 计算机视觉

0. 要实现的效果 让树莓派可以识别身边的一些物品&#xff0c;比如电脑&#xff0c;鼠标&#xff0c;键盘&#xff0c;杯子&#xff0c;行李箱&#xff0c;双肩包&#xff0c;床&#xff0c;椅子等 1. 硬件设备 树莓派 5 raspberrypi.com/products/raspberry-pi-5/树莓派官方摄…

JS学习(1)(基本概念与作用、与HTML、CSS区别)

目录 一、JavaScript是什么&#xff1f; &#xff08;1&#xff09;基本介绍 &#xff08;2&#xff09;简称&#xff1a;JS&#xff1f; 二、JavaScript的作用。 三、HTML、CSS、JS之间的关系。 &#xff08;1&#xff09;html、css。 &#xff08;2&#xff09;JavaScript。 …

matlab读取NetCDF文件

matlab对NetCDF文件进行信息获取和读取数据 文章目录 前言一、什么是NetCDF文件二、读取NetCDF文件数据 1.引入库 2.读入数据总结 前言 在气象学中&#xff0c;许多气象数据存储在NetCDF文件中&#xff0c;后缀为.nc&#xff0c;通常可以用NCL、python和MATLAB等对该…

shell自动显示当前git的branch

效果简介&#xff1a; 1. 如果没在git仓库&#xff0c;显示无变化 2. 如果在git仓库&#xff0c;显示当前分支 实现方法&#xff1a; 在~/.bashrc 里添加&#xff1a; function git_branch { test -d .git && branch"git branch | grep "^\*" | sed…

第四十一天 ASP应用 HTTP.sys 漏洞 iis6文件解析漏洞和短文件漏洞 access数据库泄露漏洞

前言 随着时代的发展现在呀&#xff0c;这个ASp已经淡出大众的视线了 &#xff0c;ASP之前的火爆程度无异于现在的PHP 大家的童年 4399 什么的网站都是这个搭建的ASP 简介 | 菜鸟教程 那大家想问为什么你妹的 这个这么火的网站搭建语言被淘汰了呢 其实多半是以为它的不开…

Java——常用类(下)

时间类 “时间如流水&#xff0c;一去不复返”&#xff0c;时间是一维的。所以&#xff0c;我们需要一把刻度尺来表达和度量时间。在计算机世界&#xff0c;我们把1970 年 1 月 1 日 00:00:00定为基准时间&#xff0c;每个度量单位是毫秒(1秒的千分之一)&#xff0c;如图所示。…

ARMv8-A MacOS调试环境搭建

文章目录 简介安装qemu交叉编译工具链C语言插件 gdb调试测试代码添加调试配置 JLink 调试树莓派 简介 本节主要介绍基于Visual Studio Code在MacOS下调试环境的搭建&#xff0c;Linux发行版上的过程也类型&#xff0c;它主要使用到以下工具链&#xff1a; aarch64 架构的交叉…

万字长文解读深度学习——dVAE(DALL·E的核心部件)

&#x1f33a;历史文章列表&#x1f33a; 深度学习——优化算法、激活函数、归一化、正则化 深度学习——权重初始化、评估指标、梯度消失和梯度爆炸 深度学习——前向传播与反向传播、神经网络&#xff08;前馈神经网络与反馈神经网络&#xff09;、常见算法概要汇总 万字长…

Javaweb 前端 ajax

作用&#xff1a;和后端交互 script 是 js axios(这里是函数的调用方式){封装的是对象} {}是对象 案例 。then的含义&#xff0c;请求后端之后&#xff0c;后端把数据放在回调 点了清空之后&#xff0c;还要查询全部 await等待请求执行完之后&#xff0c;接收这个结果 代码…

IdentityServer4框架、ASP.NET core Identity

OAuth2.0 IdentityServer4 ASP.NET Core Identity提供了一个用来管理和存储用户账户的框架. IdentityServer4是基于ASP.NET Core实现的认证和授权框架&#xff0c;是对OpenID Connect和OAuth 2.0协议的实现。 IdentityServer是一个中间件,它可以添加符合OpenID Connect和OAut…

Linux系统nginx版本升级

最近公司漏扫有涉及到需要升级nginx的部分, 以下是一些总结经验 检查当前nginx版本 执行命令: nginx -V 如果没有设置环境变量则需要进入到nginx目录sbin目录下执行: ./nginx -V 下载最新版nginx nginx下载地址: https://nginx.org/en/download.html 1)选择稳定版本 wget h…

给建筑物“穿毛衣”:AI绘图新玩法

随着气温的骤降&#xff0c;我们不仅感受到了自然界的寒冷&#xff0c;甚至连城市的建筑物似乎也在寒风中“颤抖”。在这样的背景下&#xff0c;一种新颖的AI绘图玩法——给建筑“穿毛衣”在网络上迅速走红。本文将详细介绍这一创意玩法&#xff0c;并提供手把手的教学指导。 A…

第2章:CSS基本语法 --[CSS零基础入门]

CSS(层叠样式表,Cascading Style Sheets)是用来描述HTML或XML(包括各种XML:SVG, MathML 或 XHTML)等文档的外观和格式的语言。以下是CSS的基本语法: 1.选择器 1.元素选择器 元素选择器是基于HTML标签名称来选择元素的。当你使用元素选择器时,你是在告诉浏览器对页面…

SpringMvc完整知识点二(完结)

SpringMVC获取请求参数 环境准备工作等均省略&#xff0c;可详见快速入门&#xff0c;此处只写非共有部分代码 该部分示例项目SpringMvcThree已上传至Gitee&#xff0c;可自行下载 客户端请求参数的格式为&#xff1a;namevalue&passwordvalue... ... 服务端想要获取请求…