Leetcode---364场周赛

news2024/11/28 13:37:17

题目列表

2864. 最大二进制奇数

2865. 美丽塔 I

2866. 美丽塔 II

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

一、最大二进制奇数

这题只要你对二进制有了解(学编程的不会不了解二进制吧),应该问题不大,这题要求最大奇数,1.奇数:只要保证二进制的最低位上是1就行(这里为不了解二进制的同学解释一下,二进制从低位到高位的权重分别是2^0,2^1,2^2...即除了最低位其他位都是偶数,所以最低位必须是1)

2.最大:贪心,我们将除了最低位的1之外的所有1都往高位放,得到的数肯定是最大的

代码如下

class Solution {
public:
    string maximumOddBinaryNumber(string s) {
        int cnt1=count(s.begin(),s.end(),'1');
        return string(cnt1-1,'1')+string(s.size()-cnt1,'0')+'1';
    }
};

二、美丽塔I

 这题的数据范围比较小,可以直接暴力,将每一个元素都当成山顶算一遍最大高度,然后比较得到最大高度,代码如下

class Solution {
public:
    long long maximumSumOfHeights(vector<int>& maxHeights) {
        long long ans=0;
        int n=maxHeights.size();
        for(int i=0;i<n;i++){
            long long res=maxHeights[i];
            for(int j=i-1,Min=maxHeights[i];j>=0;j--){
                Min=min(Min,maxHeights[j]);
                res+=Min;
            }
            for(int j=i+1,Min=maxHeights[i];j<n;j++){
                Min=min(Min,maxHeights[j]);
                res+=Min;
            }
            ans=max(ans,res);
        }
        return ans;
    }
};

三、美丽塔II

这题的题目和上一题一样,只是加大了数据范围,即不能用暴力枚举的方法解题,那么我们怎么优化算法呢?关键在于发现上面一题的算法中有什么是被重复计算的我们只要减少这些无用的运算,就能实现算法的时间复杂度优化。

为了方便叙述,我将山顶前面的部分称为上坡,山顶后面的部分称为下坡,很显然,上面算法在每次计算上坡/下坡时,总是不断的遍历之前就已经遍历过的元素,那么我们如何根据已经遍历过的元素来求出当前的上坡/下坡的高度呢?而且上坡和下坡的计算是分开的互不影响的,只要我们提前处理出各种上坡和下坡的高度,我们就能在O(n)的时间里得到最大高度。

如何利用之前遍历的元素信息,得到当前的上坡/下坡的高度?以计算上坡为例,解析如下

代码如下 

class Solution {
public:
    long long maximumSumOfHeights(vector<int>& maxHeights) {
        long long ans=0;
        int n=maxHeights.size();
        vector<long long>pre(n),suf(n);//分别代表以i为山顶的上坡和下坡
        stack<int>st;//里面存放下标,方便计算出栈个数和索引高度
        st.push(-1);//这里是为了方便计算,简化逻辑
        for(int i=0;i<n;i++){
            while(st.size()>1&&maxHeights[i]<maxHeights[st.top()])
                st.pop();
            int idx=st.top();
            pre[i]=(idx<0?0:pre[idx])+1LL*(i-st.top())*maxHeights[i];
            st.push(i);
        }
        st=stack<int>();//让栈为空
        st.push(n);//这里是为了方便计算,简化逻辑
        for(int i=n-1;i>=0;i--){
            while(st.size()>1&&maxHeights[i]<maxHeights[st.top()])
                st.pop();
            int idx=st.top();
            suf[i]=(idx==n?0:suf[idx])+1LL*(st.top()-i)*maxHeights[i];
            st.push(i);
        }
        for(int i=0;i<n;i++){
            ans=max(ans,pre[i]+suf[i]-maxHeights[i]);
        }
        return ans;
    }
};

这里说明一下算法的时间复杂度为O(n),有人或许看到求pre/suf中有两层循环,就认为时间复杂度为O(n^2),但其实不是,我们来看一下while循环里面的出栈语句执行了多少次,因为我们入栈的元素是n个,所以出栈的元素也只能是n个,所以这条语句只能执行n次,所以时间复杂度为O(n)

四、统计树种的合法路径数量

这题求路径个数,首先读懂题意,要求路径上包含一个质数,那么我们是从质数出发好,还是从非质数出发好呢?我们只要稍稍想一下就会发现从质数出发好,因为这样我们只要找到下一个质数就停止,而从非质数出发,我们就需要连续找到两个质数,很显然从非质数出发要处理的情况更多,所以我们从质数出发找路径,当然注意这题的路径至少需要两个结点(看示例一)

那么我们从质数出发怎么算呢?(判断质数就不讲了,不会的可以去看Leetcode-352周赛的第二题)

其他的路径求解方法同上,代码如下

//埃氏筛
const int MX=1e5;
vector<bool>is_prime(MX+1,true);
int init=[](){
    is_prime[1]=false;
    for(int i=2;i*i<=MX;i++){
        if(is_prime[i]){
            for(int j=i*i;j<=MX;j+=i){
                is_prime[j]=false;
            }
        }
    }
    return 0;
}();
class Solution {
public:
    long long countPaths(int n, vector<vector<int>>& edges) {
        vector<vector<int>>g(n+1);
        for(auto&e:edges){
            int x=e[0],y=e[1];
            g[x].push_back(y);
            g[y].push_back(x);
        }

        //计算质数结点连接的每一个子树中的非质数结点个数
        vector<int>sz(n+1);
        vector<int>nodes;
        function<void(int,int)> dfs=[&](int x,int fa){
            nodes.push_back(x);
            for(int y:g[x])
                if(y!=fa&&!is_prime[y])
                    dfs(y,x);
        };

        long long ans=0;
        for(int x=1;x<=n;x++){
            if(!is_prime[x]) continue;
            int sum=0;
            for(int y:g[x]){
                if(is_prime[y]) continue;
                if(sz[y]==0){
                    nodes.clear();
                    dfs(y,-1);
                    for(int z:nodes){
                        sz[z]=nodes.size();
                    }
                }    
                ans+=(long long)sum*sz[y];//以i为中间点的路径
                sum+=sz[y];
            }
            ans+=sum;//以i为端点的路径
        }
        return ans;
    }
};

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

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

相关文章

二维码智慧门牌管理系统:创新历史,稳定未来

文章目录 前言一、解决传统门牌管理混乱二、提供便捷服务三、尊重历史&#xff0c;保持稳定 前言 随着科技的飞速发展&#xff0c;二维码智慧门牌管理系统已经成为了城市管理的新趋势。这款系统的出现&#xff0c;不仅优化了传统门牌管理的不足&#xff0c;还大大提高了城市管…

3.物联网射频识别,(高频)RFID应用ISO14443-2协议

一。ISO14443-2协议简介 1.ISO14443协议组成及部分缩略语 &#xff08;1&#xff09;14443协议组成&#xff08;下面的协议简介会详细介绍&#xff09; 14443-1 物理特性 14443-2 射频功率和信号接口 14443-3 初始化和防冲突 &#xff08;分为Type A、Type B两种接口&…

(高阶) Redis 7 第16讲 预热/雪崩/击穿/穿透 缓存篇

面试题 什么是缓存预热/雪崩/击穿/穿透如何做缓存预热如何避免或减少缓存雪崩穿透和击穿的区别?穿透和击穿的解决方案出现缓存不一致时,有哪些修补方案缓存预热 理论 将需要的数据提前加载到缓存中,不需要用户使用的过程中进行数据回写。(比如秒杀活动数据等) 方案 1.…

【C语言深入理解指针(1)】

1.内存和地址 1.1内存 在讲内存和地址之前&#xff0c;我们想有个⽣活中的案例&#xff1a; 假设有⼀栋宿舍楼&#xff0c;把你放在楼⾥&#xff0c;楼上有100个房间&#xff0c;但是房间没有编号&#xff0c;你的⼀个朋友来找你玩&#xff0c;如果想找到你&#xff0c;就得挨…

学校安全用电管理系统解决方案

随着科技的发展和进步&#xff0c;电力已成为我们日常生活和学习的重要支柱。然而&#xff0c;电力的使用也带来了一定的安全风险。特别是对于学校这个复杂而又活跃的环境&#xff0c;安全用电管理系统的角色显得尤为重要。 一、学校用电管理系统的现状 目前&#xff0…

2023-09-28 LeetCode每日一题(花期内花的数目)

2023-09-28每日一题 一、题目编号 2251. 花期内花的数目二、题目链接 点击跳转到题目位置 三、题目描述 给你一个下标从 0 开始的二维整数数组 flowers &#xff0c;其中 flowers[i] [starti, endi] 表示第 i 朵花的 花期 从 starti 到 endi &#xff08;都 包含&#xf…

JSP学习笔记【三】——JQuery

前言 在写项目的时候需要动态对某组件的属性进行调整&#xff0c;我看网上的教程都是使用document.getElementById等&#xff0c;但我在eclipse编写.jsp文件的时候&#xff0c;却提示document cannot be resolved。由于我对jsp没有系统的了解以及无人可咨询&#xff0c;网上也…

【DTEmpower案例操作教程】向导式建模

DTEmpower是由天洑软件自主研发的一款通用的智能数据建模软件&#xff0c;致力于帮助工程师及工科专业学生&#xff0c;利用工业领域中的仿真、试验、测量等各类数据进行挖掘分析&#xff0c;建立高质量的数据模型&#xff0c;实现快速设计评估、实时仿真预测、系统参数预警、设…

XSS详解

XSS一些学习记录 XXS短标签、属性、事件、方法短标签属性事件函数弹窗函数一些对于绕过有用的函数一些函数使用payload收集 浏览器编码问题XML实体编码URL编码JS编码混合编码 一些绕过方法利用constructor原型污染链构造弹框空格绕过圆括号过滤绕过其他的一些绕过 参考 XXS短标…

ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明

TP 内置的跨域配置类 AllowCrossDomain TP 框架提供的内置类&#xff1a; \think\middleware\AllowCrossDomain::class 开启跨域 <?php// 全局中间件定义文件return [// 全局请求缓存// \think\middleware\CheckRequestCache::class,// 多语言加载// \think\middleware\L…

联邦学习-Tensorflow实现联邦模型AlexNet on CIFAR-10

目录 Client端 Server端 扩展 Client.py Server.py Dataset.py Model.py 分享一种实现联邦学习的方法&#xff0c;它具有以下优点&#xff1a; 不需要读写文件来保存、切换Client模型 不需要在每次epoch重新初始化Client变量 内存占用尽可能小&#xff08;参数量仅翻一…

前端JavaScript入门到精通,javascript核心进阶ES6语法、API、js高级等基础知识和实战 —— Web APIs(三)

思维导图 全选案例 大按钮控制小按钮 小按钮控制大按钮 css伪类选择器checked <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><…

面试题:说一下SpringBoot的自动配置原理

文章目录 引言工作原理剖析EnableAutoConfiguration自动配置生效总结 引言 不论在工作中&#xff0c;亦或是求职面试&#xff0c;Spring Boot已经成为我们必知必会的技能项。除了某些老旧的政府项目或金融项目持有观望态度外&#xff0c;如今的各行各业都在飞速的拥抱这个已经…

Leetcode205. 同构字符串

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0…

Zygisk-IL2CppDumper对抗方案

众所周知&#xff0c;Unity引擎中有两种脚本编译器&#xff0c;分别是 Mono 和 IL2CPP 。这两种脚本编译器各有优势&#xff0c;同时也存在一些安全性问题&#xff0c;本文将从游戏安全角度对其进行分析并提供对策。 Mono 是由跨平台的开源.NET 实现&#xff0c;它允许开发者使…

Node.js安装教程【附安装包资源】

文章目录 安装包下载安装流程配置环境变量检查Node.js是否安装成功指定全局模块和模块缓存的路径设置淘宝镜像全局安装cnpm&#xff08;这一步可以选择是否执行&#xff09; 安装包下载 安装包下载 安装流程 修改安装路径 配置环境变量 看看环境变量里面是否有Node.js的…

Caused by: java.net.UnknownHostException: nacos

我这边的原因很简单&#xff0c;因为使用nacos作为配置中心&#xff0c;编写配置文件的时候&#xff0c;文件名称漏了.yml后缀 改成test.yml就好了。粗心造成的错&#xff0c;有时候比代码错误更难排查。。。

用于自然语言处理的 Python:理解文本数据

一、说明 Python是一种功能强大的编程语言&#xff0c;在自然语言处理&#xff08;NLP&#xff09;领域获得了极大的普及。凭借其丰富的库集&#xff0c;Python 为处理和分析文本数据提供了一个全面的生态系统。在本文中&#xff0c;我们将介绍 Python for NLP 的一些基础知识&…

闲置手机电脑流量变现项目

在之前的文章中&#xff0c;我曾经介绍过一个叫Traffmonetizer的国外流量挂机项目&#xff0c;但是经过这段时间的测试。总体来说&#xff0c;收益非常差&#xff0c;并且没有相关的网络配置教程。 上一篇文章直达&#xff1a;流量挂机赚钱项目Traffmonetizer_Yokon_D的博客-C…

程序员的浪漫:如何用java代码画❤️表白呢?

有位小伙伴说&#xff0c;看到一个帖子&#xff0c;一个计算机博士接亲时&#xff0c;要求现场写代码&#xff0c;5分钟做出一个爱心。我们就看看如何用java设计出心形的代码。 我找了一下&#xff0c;发现方法竟然很多&#xff0c;我们就来见识一下&#xff0c;最后我们看一下…