力扣2月最后三天的每日一题

力扣2月最后三天的每日一题

  • 前言
  • 2867.统计树中的合法路径数目
    • 思路
    • 确定1e5中的质数
    • 统计每个点的连接情况
    • 开始对质数点进行处理
    • 完整代码
  • 2673.使二叉树所有路径值相等的最小代价
    • 思路
    • 完整代码
  • 2581.统计可能的树根数目
    • 思路
    • 建立连通关系
    • 将猜测数组变为哈希表,方便查询
    • 利用dfs初始化根为0的猜测正确数量
    • 统计完整的结果


前言

不会做,全靠灵神的视频讲解

2867.统计树中的合法路径数目

思路

考虑质数节点,每个质数节点应该都有属于它自己的多个连通块,而每个连通块中存在的非质数路径那么就可以形成一条合法路径
在这里插入图片描述
所以我们需要去统计一个质数的连通块中有多少非质数的连通情况,最后结果相加即可
在这里插入图片描述

确定1e5中的质数

对于一个质数,其的倍数一定不是质数

    void checknp(bool* np){np[1] = true;for(int i = 2;i*i<MX+1;i++){for(j = i*i ;j <MX+1;j+=i){if(!np[i]){np[j] = true;}}}}

统计每个点的连接情况

根据传入参数edgs数组,可以得到每个点与哪些点连接

        vector<vector<int>> connect(n+1);for(auto edge : edges){connect[edge[0]].push_back(edge[1]);connect[edge[1]].push_back(edge[0]);}

开始对质数点进行处理

我们需要用到记忆化搜索的技巧。当我们对一个非质数与哪些非质数连接情况进行讨论后,我们可以将结果存储,如果后面有质数节点也与该非质数节点连接,那么就可以直接使用了。

//记录返回值 和 记忆化存储非质数节点与多少个非质数节点连接
long long res = 0;
vector<int> mem(n+1);
for(int i = 1;i<n+1;i++)
{//如果是非质数,就可以跳过,因为我们只考虑质数的连通if(np[i]) continue;//记录连通数int sum = 0;//对i的连通点进行处理结果for(int j : connect[i]){//只考虑非质数的情况if(!np[j]) continue;//如果没有被搜索过if(mem[j] == 0){//存储相互连接节点的数组清空nodes.clear();checknodes(j,-1,connect);//对于nodes数组里面的所有点,其连通点的个数都是nodes数组的长度for(int k : nodes){mem[k] = nodes.size();}}//计算结果,质数i下面的j连通块res += mem[j] * sum;sum += mem[j];}//以质数为头的结果res += sum;
}

完整代码

const int MX = 1e5;
class Solution {
private:bool np[MX+1];vector<int> nodes;
public:void checknp(bool* np){np[1] = true;for(int i = 2;i*i<MX+1;i++){for(int j = i*i ;j <MX+1;j+=i){if(!np[i]){np[j] = true;}}}}void checknodes(int x,int fa,vector<vector<int>>& connect){nodes.push_back(x);for(int y:connect[x]){if(y!=fa&&np[y]){checknodes(y,x,connect);}}}
public:long long countPaths(int n, vector<vector<int>>& edges) {checknp(np);vector<vector<int>> connect(n+1);for(auto edge : edges){connect[edge[0]].push_back(edge[1]);connect[edge[1]].push_back(edge[0]);}//结果long long res = 0;//记忆化搜索vector<int> mem(n+1);for(int i = 1;i<n+1;i++){if(np[i]) continue;//记录当前节点的连接数int sum = 0;for(int j : connect[i]){if(!np[j]) continue;//如果没被遍历过if(mem[j] == 0){nodes.clear();checknodes(j,-1,connect);//修改记忆存储结果for(int k : nodes){mem[k] = nodes.size();}}//统计该连通块对结果的影响res += mem[j]*sum;sum += mem[j];}//已质数节点为头的情况res += sum;}return res;}
};

2673.使二叉树所有路径值相等的最小代价

思路

从叶子节点开始,计算根节点到该叶子节点的路径和,然后修改其中一个叶子节点使得和相等,由于只能增加,所以向大值修改。
修改完成后将该和返回给叶子节点的父节点,然后比较同一层级的父节点的和,进行修改。
逐步返回直到根节点

完整代码

对于满二叉树,父节点和左右子结点在数组中存在一个关系。

class Solution {
public:int minIncrements(int n, vector<int>& cost) {//统计每个节点的路径和for(int i = 2;i<n+1;i++){cost[i-1] += cost[i/2-1];}//更新结果int res = 0;for(int i = n/2;i>0;i--){res += abs(cost[2*i]-cost[2*i-1]);cost[i-1] = max(cost[2*i],cost[2*i-1]);}return res;}
};

2581.统计可能的树根数目

思路

还不是很明白
我们假设以0为根的正确猜测是cnt0,那调换到以1为根,那么cnt1的值
首先需要减去guesses数组[0,1]的数量,再加上[1,0]的数量,因为[u,v]表示u是v的父节点。
其余调换类似。

建立连通关系

vector<vector<int>> g(edges.size() + 1);
for (auto &e : edges) 
{int x = e[0], y = e[1];g[x].push_back(y);g[y].push_back(x);
}

将猜测数组变为哈希表,方便查询

unordered_set<LL> s;
for (auto &e : guesses) 
{ // guesses 转成哈希表s.insert((LL) e[0] << 32 | e[1]); // 两个 4 字节数压缩成一个 8 字节数
}

利用dfs初始化根为0的猜测正确数量

int ans = 0, cnt0 = 0;
function<void(int, int)> dfs = [&](int x, int fa) 
{//y与x连通for (int y : g[x]){//y不是父节点,防止反向计算if (y != fa) {//[x,y]如果存在哈希表中,表面以0为根的结果猜测正确+1cnt0 += s.count((LL) x << 32 | y); // 以 0 为根时,猜对了//以当前节点为父节点搜索子结点dfs(y, x);}}
};
dfs(0, -1);

统计完整的结果

//计算以x为根的cnt
function<void(int, int, int)> reroot = [&](int x, int fa, int cnt) 
{ans += cnt >= k; // 此时 cnt 就是以 x 为根时的猜对次数for (int y : g[x]) {if (y != fa) {//从0开始,变换根为0的连通节点,在变换为连通节点的连通节点reroot(y, x, cnt- s.count((LL) x << 32 | y)   // 原来是对的,现在错了+ s.count((LL) y << 32 | x)); // 原来是错的,现在对了}}
};
reroot(0, -1, cnt0);

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

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

相关文章

七通道NPN 达林顿管GC2003,专为符合标准 TTL 而制造,最高工作电压 50V,耐压 80V

GC2003 内部集成了 7 个 NPN 达林顿晶体管&#xff0c;连接的阵列&#xff0c;非常适合逻辑接口电平数字电路&#xff08;例 如 TTL&#xff0c;CMOS 或PMOS 上/NMOS&#xff09;和较高的电流/电压&#xff0c;如电灯电磁阀&#xff0c;继电器&#xff0c;打印机或其他类似的负…

读《代码整洁之道》有感

最近读了一本书&#xff0c;名字大家都看到了&#xff1a;《代码整洁之道》&#xff0c;之前一直只是听说过这本书的大名&#xff0c;却一直没有进行拜读&#xff0c;最近想起来了就想着看一看&#xff0c;不看不要紧&#xff0c;看了之后就像吃了炫迈&#xff0c;根本停不下来…

MATLAB环境下脑电信号EEG的谱分析

脑电信号一直伴随着人类的生命&#xff0c;脑电波是脑神经细胞发生新陈代谢、离子交换时细胞群兴奋突触电位总和&#xff0c;脑电信号的节律性则和丘脑相关&#xff0c;含有丰富的大脑活动信息。通常我们所接触的脑电图都是头皮脑电图&#xff0c;在有些特殊场合还需要皮下部位…

10.广域网技术

1. PPP实验点这里&#xff08;拓扑代码&#xff09; 2. PPPoE配置实验点这里&#xff08;拓扑代码&#xff09; 目录 一、广域网二、PPP协议三、PPP链路建立过程1-LCP&#xff08;链路协商&#xff09;四、PPP链路建立过程2-PAP/CHAP&#xff08;认证协商&#xff0c;可选&…

python语言1

一、pytho中的注释 1.1注释的理解 程序员在代码中对代码功能解释说明的标注性文字可以提高代码的可读性注释的内容将被python解释器忽略&#xff0c;不被计算机执行 1.2注释的分类 注释分为&#xff1a;单行注释、多行注释、中文声明注释 &#xff08;1&#xff09;单行注…

LeetCode240题:搜索二维矩阵II(python3)

代码思路&#xff1a; “根节点” 对应的是矩阵的 “左下角” 和 “右上角” 元素&#xff0c;以 matrix 中的左下角元素为标志数 flag &#xff0c;则有: 若 flag > target &#xff0c;则 target 一定在 flag 所在行的上方 &#xff0c;即 flag 所在行可被消去&#xff0c…

kotlin安卓开发教程视频,2024年Android开发陷入饱和

Android基础 1、什么是ANR 如何避免它&#xff1f; 如果耗时操作需要让用户等待&#xff0c;那么可以在界面上显示进度条。 2、View的绘制流程&#xff1b;自定义View如何考虑机型适配&#xff1b;自定义View的事件 3、分发机制&#xff1b;View和ViewGroup分别有哪些事件分…

【Leetcode每日一刷】贪心算法|122.买卖股票的最佳时机 II、55. 跳跃游戏

一、122.买卖股票的最佳时机 II 力扣题目链接 &#x1f984;解题思路&#xff1a; 首先需要明确的几个点&#xff1a; 当前只能有最大一支股票每一天操作只能3选1&#xff1a;买or卖or休息 此外&#xff0c;对于贪心&#xff0c;总有像下面图示的一种直觉&#xff1a;如果…

力扣SQL50 产品销售分析 I 查询

Problem: 1068. 产品销售分析 I 思路 left join on&#xff1a;左连接 Code select p.product_name, s.year, s.price from Sales s left join Product p on s.product_id p.product_id

靠谱的车【华为OD机试-JAVAPythonC++JS】

题目描述 程序员小明打了一辆出租车去上班。出于职业敏感&#xff0c;他注意到这辆出租车的计费表有点问题&#xff0c;总是偏大。 出租车司机解释说他不喜欢数字4&#xff0c;所以改装了计费表&#xff0c;任何数字位置遇到数字4就直接跳过&#xff0c;其余功能都正常。 比如&…

Scaffold 脚手架

Scaffold 脚手架 Scaffold 脚手架组件是一个核心组件&#xff0c;它为开发者提供了一个标准的、可定制的应用界面框架。androidx.compose.material3.Scaffold 包含了应用界面的基础元素&#xff0c;如状态栏、导航栏、顶部应用栏&#xff08;TopAppBar&#xff09;等。通过 Sc…

Windows的Docker-Desktop安装与问题总结

目录 Docker-Desktop安装步骤 环境配置 Docker-Desktop安装问题总结 问题1&#xff1a;docker-desktop setting界面一直加载转圈 问题2&#xff1a;docker镜像的存储位置变更&#xff08;防止C盘空间不足&#xff09; 参考文献&#xff1a; Docker-Desktop安装步骤 环境…

又挖到宝了!国人团队研发的AI视频工具PixVerse,这么好用居然还完全免费!(强烈推荐)

昨天发了一款国产免费的 AI 绘画工具 Dreamina 的介绍&#xff1a; 居然才发现&#xff01;字节跳动旗下国产AI绘画工具Dreamina&#xff0c;这么好用居然还免费&#xff01;&#xff08;强烈推荐&#xff09; 发现大家对国产 AI 工具还挺感兴趣的。今天继续帮大家挖国产的 A…

【Leetcode每日一题】二分查找 - 山脉数组的峰顶索引(难度⭐⭐)(23)

1. 题目解析 Leetcode链接&#xff1a;852. 山脉数组的峰顶索引 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 核心在于找到题目中所说的峰值所在的下标并返回他们的下标即可。 2. 算法原理 峰顶及两侧数据特点分析 峰顶数据…

运算放大电路常用接法

1、反相比例运算电路 2、同相比例运算电路 3、电压跟随器 4、反相求和运算电路 5、同相求和运算电路 6、加减运算电路 7、加减电路 8、积分运算电路 9、实用积分电路 10、微分运算电路 11、实用微分电路 12、压控电压源二阶低通滤波器 13、压控电压源二阶高通滤波器 14、RC桥式…

[剪藏] - 尊湃通讯公司窃密曝光,发现绕不过华为

在科技领域风起云涌的今天&#xff0c;一场惊心动魄的窃密事件悄然发生&#xff0c;涉及华为WIFI6芯片技术的商业秘密被窃取&#xff0c;案中主谋竟然是一位曾在华为海思拥有重量级地位的技术大佬。本文将深入挖掘这起事件的来龙去脉&#xff0c;探讨窃密者的背叛和华为的技术守…

公钥密码体制

公钥密码体制 一个系统中,n个用户之间要进行保密通信,为了确保安全性,两两用户之间的密钥不能一样。这种方式下,需要系统提供C2 n=n(n-1)/2把共享密钥。这样密钥的数量就大幅增加了,随之而来的产生、存储、分配、管理密钥的成本也大幅增加。而使用公钥密码体制可以大大减…

深度学习-回顾经典AlexNet网络:山高我为峰

深度学习-回顾经典AlexNet网络之山高我为峰 深度学习中&#xff0c;经典网络引领一波又一波的技术革命&#xff0c;从LetNet到当前最火的GPT所用的Transformer&#xff0c;它们把AI技术不断推向高潮。2012年AlexNet大放异彩&#xff0c;它把深度学习技术引领第一个高峰&#x…

总结一下linux性能检测和调优手段

1.perf 是 Linux 系统中性能分析工具&#xff0c;用于收集性能相关的信息。它可以用于查看 CPU 使用情况、内存性能、磁盘 I/O 等&#xff0c;以帮助开发者找到性能瓶颈。 以下是一些 perf 常见用法和示例&#xff1a; 1. CPU Profiling a. 查看 CPU 使用率 perf stat -e cpu…

10分钟SkyWalking与SpringBoot融合并整合到Linux中

1.依赖配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.2.0.RELEASE</version></dependency><dependency><groupId>org.springframe…