Leetcode - 周赛426

news2024/12/27 7:17:16

目录

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

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

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

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


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

两种做法:

  1. 暴力枚举长度为 1,2,3..... 的二进制全为 1 的值,直到它大于等于 n 
  2. 直接返回长度为 m  (m = n 的二进制长度) 的二进制全为 1 的值

代码如下:

//暴力枚举 O(logn)
class Solution {
    public int smallestNumber(int n) {
        int ans = 0, i = 0;
        while(ans < n){
            ans = (1 << i) - 1;
            i++;
        }
        return ans;
    }
}

//O(1)
class Solution {
    public int smallestNumber(int n) {
        int len = 32 - Integer.numberOfLeadingZeros(n);
        return (1 << len) - 1;
    }
}

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

本题其实是一道数学问题,设特殊数字的和为 x,异常值为 y,由题意得,2*x + y = sum(nums),这时可以看出,它实际上就是 leetcode 第一题两数之和,可以枚举 x,通过上述公式得到 y,判断其是否在 nums 数组中,如果在,求出其中的最大值。

代码如下:

class Solution {
    public int getLargestOutlier(int[] nums) {
        int n = nums.length, s = 0;
        Map<Integer, Integer> map = new HashMap<>();
        for(int x : nums){
            map.merge(x, 1, Integer::sum);
            s += x;
        }
        int ans = -1001;
        for(int y : nums){
            int t = s - y;
            //需要特判 x == y 的情况,这时 map.get(t / 2) > 1
            if(t%2==0 && map.containsKey(t/2) && (t/2 != y || map.get(t/2) > 1))
                ans = Math.max(ans, y);
        }
        return ans;
    }
}

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

对于第一棵树中的第 i 个节点来说,新添加的边其中的一个节点必定是节点 i,因为如果不是 i,第二棵树中的每个节点与 i 节点的距离只会更大。

得出上述结论后,我们可以发现其实第二棵树中满足条件的节点个数是固定的,直接暴力枚举每一个与 i 相连的节点,求出与 i 节点距离小于等于 k - 1 (i 与 枚举的节点之间还有一条边)的最多节点数 mx。

这时,只需要求出第一棵树中第 i 节点满足条件的目标节点个数 + mx,就得到了 ans[i].

代码如下:

class Solution {
    public int[] maxTargetNodes(int[][] edges1, int[][] edges2, int k) {
        List<Integer>[] g1 = createTree(edges1);
        List<Integer>[] g2 = createTree(edges2);
        int n = edges1.length + 1;
        int m = edges2.length + 1;
        int mx = 0;
        for(int i=0; i<m; i++){
            mx = Math.max(mx, dfs(i, -1, k-1, g2) + (k==0?0:1));
        }
        int[] ans = new int[n];
        for(int i=0; i<n; i++){
            //与i距离<=k的节点数 + 本身 + 第二棵树中的节点个数
            ans[i] = dfs(i, -1, k, g1) + 1 + mx;
        }
        return ans;
    }
    int dfs(int x, int fa, int k, List<Integer>[] g){
        if(k <= 0) return 0;
        int res = 0;
        for(int y : g[x]){
            if(y != fa){
                res += dfs(y, x, k-1, g) + 1;
            }
        }
        return res;
    }
    List<Integer>[] createTree(int[][] edge){
        int n = edge.length + 1;
        List<Integer>[] g = new ArrayList[n];
        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);
        }
        return g;
    }
}

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

对于每棵树来说,假定一个根节点 root,分别计算出与 root 之间路径为奇,偶的节点数量 x, y(x + y = n),如果把 root 节点相邻的节点 reroot 当成根节点,可以发现所有与节点 root  路径为奇的节点现在都变成了与节点 reroot 路径为偶的节点,而所有与节点 root  路径为偶的节点现在都变成了与节点 reroot 路径为奇的节点,依次类推,得出结论:对于单独的一个树来说,目标节点的个数是max(x,y)

代码如下:

class Solution {
    public int[] maxTargetNodes(int[][] edges1, int[][] edges2) {
        List<Integer>[] g1 = createTree(edges1);
        List<Integer>[] g2 = createTree(edges2);
        int n = edges1.length + 1;
        int m = edges2.length + 1;
        mx = dfs(0, -1, 0, g2) + 1;
        mx = Math.max(mx, m - mx);
        int[] ans = new int[n];
        ans[0] = dfs(0, -1, 0, g1) + 1 + mx;
        dfs1(0, -1, ans, g1);
        return ans;
    }
    int mx;
    void dfs1(int x, int fa, int[] ans, List<Integer>[] g){
        int n = g.length;
        for(int y : g[x]){
            if(y != fa){
                ans[y] = n - ans[x] + 2*mx;
                dfs1(y, x, ans, g);
            }
        }
    }
    int dfs(int x, int fa, int k, List<Integer>[] g){
        int res = 0;
        for(int y : g[x]){
            if(y != fa){
                res += dfs(y, x, k+1, g) + k%2;
            }
        }
        return res;
    }
    List<Integer>[] createTree(int[][] edge){
        int n = edge.length + 1;
        List<Integer>[] g = new ArrayList[n];
        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);
        }
        return g;
    }
}

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

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

相关文章

用 Python 从零开始创建神经网络(十四):L1 和 L2 正则化(L1 and L2 Regularization)

L1 和 L2 正则化&#xff08;L1 and L2 Regularization&#xff09; 引言1. Forward Pass2. Backward pass到此为止的全部代码&#xff1a; 引言 正则化方法旨在降低泛化误差。我们首先讨论的正则化形式是L1正则化和L2正则化。L1和L2正则化用于计算一个数值&#xff08;称为惩…

浅谈网络 | 应用层之流媒体与P2P协议

目录 流媒体名词系列视频的本质视频压缩编码过程如何在直播中看到帅哥美女&#xff1f;RTMP 协议 P2PP2P 文件下载种子文件 (.torrent)去中心化网络&#xff08;DHT&#xff09;哈希值与 DHT 网络DHT 网络是如何查找 流媒体 直播系统组成与协议 近几年直播比较火&#xff0c;…

云计算介绍_3(计算虚拟化——cpu虚拟化、内存虚拟化、io虚拟化、常见集群策略、华为FC)

计算虚拟化 1.计算虚拟化介绍1.1 计算虚拟化 分类&#xff08;cpu虚拟化、内存虚拟化、IO虚拟化&#xff09;1.1.1 cpu虚拟化 一级目录 一级目录 一级目录 一级目录 1.计算虚拟化介绍 1.1 计算虚拟化 分类&#xff08;cpu虚拟化、内存虚拟化、IO虚拟化&#xff09; 1.1.1 cpu虚…

关于 Qt编译遇到fatal error C1189: #error: “No Target Architecture的 解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/144205902 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…

基于python的某音乐网站热门歌曲的采集与分析,包括聚类和Lda主题分析

一项目背景 在当前竞争激烈的市场环境下&#xff0c;分析酷狗音乐上的热门歌曲及其用户行为趋势&#xff0c;对平台运营、歌曲推荐和音乐创作具有重要意义。尤其是通过对酷狗音乐平台热门歌曲的数据采集与分析&#xff0c;可以深入理解用户偏好、歌曲流行的规律以及市场需求的…

React 路由与组件通信:如何实现路由参数、查询参数、state和上下文的使用

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

掌握排序艺术:Java 中常见排序算法的深度解析与实战

排序是计算机科学中的一个基本问题&#xff0c;它在数据处理、搜索和分析中扮演着重要角色。Java提供了多种内置的排序方法&#xff0c;但了解不同排序算法的工作原理及其优缺点对于优化性能和选择合适的解决方案至关重要。本文将详细介绍几种常见的排序算法&#xff0c;包括它…

html+css网页设计马林旅行社移动端4个页面

htmlcss网页设计马林旅行社移动端4个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 获取源码 1&#…

Linux系统编程之进程控制

概述 在Linux系统中&#xff0c;创建一个新的进程后&#xff0c;如何对该进程进行有效的控制&#xff0c;是一项非常重要的操作。控制进程状态的操作主要包括&#xff1a;进程的执行、进程的等待、进程的终止等。下面&#xff0c;我们将逐个进行介绍。 进程的执行 创建进程后&a…

猜数字的趣味小游戏——rand函数、srand函数、time函数的使用

文章目录 前言一、随机数的生成1.1. rand函数1.2. srand函数1.3. time函数 二、设置随机数的范围三、猜数字游戏的代码实现总结 前言 上一篇博客我们写了一个电脑关机的小游戏&#xff0c;我篇博客我们写一个猜数字的小游戏&#xff0c;学习rand函数、srand函数、time函数的使…

ScratchLLMStepByStep:一步一步构建大语言模型教程

前言 在学习大语言模型的时候&#xff0c;总会遇到各种各样的名词&#xff0c;像自注意力、多头、因果、自回归、掩码、残差连接、归一化等等。这些名词会让学习者听的云里雾里&#xff0c;觉得门槛太高而放弃。 本教程将会带你从零开始&#xff0c;一步一步的去构建每一个组…

从0开始学PHP面向对象内容之常用设计模式(享元)

二、结构型设计模式 7、享元模式&#xff08;Flyweight Pattern&#xff09; 这里是引用享元模式&#xff08;Flyweight Pattern&#xff09; 是一种结构型设计模式&#xff0c;旨在通过共享对象来减少内存使用&#xff0c;尤其适用于大量相似对象的场景。通过共享和重用对象的…

时钟约束在STA中的作用

时钟约束在STA中的作用 1.约束作为声明2.约束作为断言3.约束作为指令4.约束作为异常5. 约束的角色变化 简介&#xff1a; STA工具从相应的设计描述中获取电路描述&#xff0c;HDL是最常用的形式。它还接受库输入–主要用来了解依赖技术的特性&#xff0c;如通过特定门的延迟值。…

Springboot 修改post请求接口入参或重新赋值

前言 很久之前写过一篇就是自动填充接口参数的&#xff0c;利用的 HandlerMethodArgumentResolver 自定义注解 Springboot Controller接口默认自动填充 业务实体参数值_springboot设置入参默认值-CSDN博客 现在这一篇也差不多&#xff0c;达到的目的就是重新去给post请求的参数…

机器学习:精确率与召回率的权衡

高精度意味着如果诊断得了那种罕见病的病人&#xff0c;可能病人确实有&#xff0c;这是一个准确的诊断&#xff0c;高召回率意味着如果有一个还有这种罕见疾病的病人&#xff0c;也许算法会正确的识别他们确实患有这种疾病&#xff0c;事实中&#xff0c;在精确与召回之间往往…

海盗王用golang重写的AccountServer功能

自从用golang重写了海盗王的网关gateserver以来&#xff0c;一直想把accountserver也重写了&#xff0c;但是一直没有进行。 趁上次刚写好那个golang版的更新器&#xff0c;还有些熟悉&#xff0c;于是把原来AccountServer的C代码重写读了个大概。它原版的写得太过于复杂&#…

【动态规划】小S的货船租赁冒险

文章目录 一、问题描述输入格式输出格式 问题背景二、动态规划思想三、代码实现细节初始化二维数组遍历每种货船遍历预算并更新状态提前剪枝优化 四、代码实现算法复杂度分析优化思路 一、问题描述 李华在码头租货船&#xff0c;有 Q 种货船可以租赁。第 i 种货船的数量为 m[i…

基于 MVC 架构的 SpringBoot 高校行政事务管理系统:设计优化与实现验证

摘 要 身处网络时代&#xff0c;随着网络系统体系发展的不断成熟和完善&#xff0c;人们的生活也随之发生了很大的变化&#xff0c;人们在追求较高物质生活的同时&#xff0c;也在想着如何使自身的精神内涵得到提升&#xff0c;而读书就是人们获得精神享受非常重要的途径。为了…

【k8s 深入学习之 event 聚合】event count累记聚合(采用 Patch),Message 聚合形成聚合 event(采用Create)

参考 15.深入k8s:Event事件处理及其源码分析 - luozhiyun - 博客园event 模块总览 EventRecorder:是事件生成者,k8s组件通过调用它的方法来生成事件;EventBroadcaster:事件广播器,负责消费EventRecorder产生的事件,然后分发给broadcasterWatcher;broadcasterWatcher:用…

HTML5动漫主题网站——天空之城 10页 html+css+设计报告成品项目模版

&#x1f4c2;文章目录 一、&#x1f4d4;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站演示 五、⚙️网站代码 &#x1f9f1;HTML结构代码 &#x1f492;CSS样式代码 六、&#x1f527;完整源码下载 七、&#x1f4e3;更多 一、&#…