第 364 场 LeetCode 周赛题解

news2024/11/25 8:19:15

A 最大二进制奇数

在这里插入图片描述

降序排序字符串,然后将最后一个 1 与最后一位交换

class Solution {
public:
    string maximumOddBinaryNumber(string s) {
        sort(s.begin(), s.end(), greater<>());
        for (int i = s.size() - 1;; i--)
            if (s[i] == '1') {
                swap(s[i], s.back());
                break;
            }
        return s;
    }
};

B 美丽塔 I

在这里插入图片描述
在这里插入图片描述

枚举: 枚举山状数组的最大值的下标 i i i,然后遍历两端 [ 0 , i ) [0,i) [0,i) ( i , n − 1 ] (i,n-1] (i,n1] ,求各位置能达到的最大高度

class Solution {
public:
    using ll = long long;

    long long maximumSumOfHeights(vector<int> &maxHeights) {
        int n = maxHeights.size();
        ll res = 0;
        for (int i = 0; i < n; i++) {
            ll cur = maxHeights[i];
            for (int j = i - 1, last = maxHeights[i]; j >= 0; j--) {
                last = min(last, maxHeights[j]);
                cur += last;
            }
            for (int j = i + 1, last = maxHeights[i]; j < n; j++) {
                last = min(last, maxHeights[j]);
                cur += last;
            }
            res = max(res, cur);
        }
        return res;
    }
};

C 美丽塔 II

在这里插入图片描述
在这里插入图片描述

单调栈+枚举:设 l [ i ] l[i] l[i] 为当 h e i g h t s [ i ] = m a x H e i g h t s [ i ] heights[i]=maxHeights[i] heights[i]=maxHeights[i] ∑ k = 0 i h e i g h t s [ k ] \sum_{k=0}^i heights[k] k=0iheights[k] 的最大值,类似地设 r [ i ] r[i] r[i] 为当 h e i g h t s [ i ] = m a x H e i g h t s [ i ] heights[i]=maxHeights[i] heights[i]=maxHeights[i] ∑ k = i h e i g h t s . s i z e ( ) − 1 h e i g h t s [ k ] \sum_{k=i}^{heights.size()-1} heights[k] k=iheights.size()1heights[k] 的最大值,用单调栈预先求出 l l l r r r 数组,答案即为: m a x { l [ i ] + r [ i ] − m a x H e i g h t s [ i ]    ∣    0 ≤ i < n } max\{ l[i]+r[i]-maxHeights[i] \; | \; 0\le i< n \} max{l[i]+r[i]maxHeights[i]0i<n}

class Solution {
public:
    using ll = long long;

    long long maximumSumOfHeights(vector<int> &maxHeights) {
        int n = maxHeights.size();
        vector<ll> l(n), r(n);
        stack<int> st;
        for (int i = 0; i < n; i++) {
            while (!st.empty() && maxHeights[st.top()] > maxHeights[i])//栈顶位置最大高度大于当前位置最大高度则需要出栈
                st.pop();
            l[i] = st.empty() ? 1LL * (i + 1) * maxHeights[i] : l[st.top()] + 1LL * (i - st.top()) * maxHeights[i];
            st.push(i);
        }
        st = stack<int>();
        for (int i = n - 1; i >= 0; i--) {
            while (!st.empty() && maxHeights[st.top()] > maxHeights[i])//栈顶位置最大高度大于当前位置最大高度则需要出栈
                st.pop();
            r[i] = st.empty() ? 1LL * (n - i) * maxHeights[i] : r[st.top()] + 1LL * (st.top() - i) * maxHeights[i];
            st.push(i);
        }
        ll res = 0;
        for (int i = 0; i < n; i++)
            res = max(res, l[i] + r[i] - maxHeights[i]);
        return res;
    }
};

D 统计树中的合法路径数目

在这里插入图片描述
在这里插入图片描述
计数+ d f s dfs dfs:设一个质数点 r o o t root root v v v 集合为: { 从 u 出发只通过非质数点能到达的非质数点的数目 ∣ u 是 r o o t 的邻接点 } \{ 从u出发只通过非质数点能到达的非质数点的数目 | u是root的邻接点 \} {u出发只通过非质数点能到达的非质数点的数目uroot的邻接点},例如下图中 r o o t root root v v v 集合为 { 1 , 2 , 3 } \{1,2,3 \} {1,2,3}
在这里插入图片描述
知道 r o o t root root v v v 集合后,则树中含 r o o t root root 的合法路径可分为两类:

  1. 一个端点为 r o o t root root 的路径,这类路径数为: ∑ v i ∈ v v i \sum_{v_i\in v} v_i vivvi
  2. 两个端点都不为 r o o t root root 的路径,这类路径数为: 1 2 ∑ v i ∈ v ∑ j ≠ i v i v j = 1 2 ( ( ∑ v i ∈ v v i ) 2 − ∑ v i ∈ v v i 2 ) \frac 1 2 \sum_{v_i\in v} \sum_{j\ne i} v_iv_j=\frac 1 2 \left ( ( \sum_{v_i\in v} v_i )^2 -\sum_{v_i\in v} v_i^2 \right ) 21vivj=ivivj=21((vivvi)2vivvi2)

不妨以 1 1 1 为树根,首先通过 d f s dfs dfs 计算 c n t _ n p cnt\_np cnt_np 数组: c n t _ n p [ i ] cnt\_np[i] cnt_np[i] 为以 i i i 为根的子树中从 i i i 出发只通过非质数点能到达的非质数点的数目。然后再次 d f s dfs dfs ,并在遍历过程中记录“从当前节点的父节点出发(且不经过当前节点)只通过非质数点能到达的非质数点的数目”,这样每到达一个质数点,就能求出它的 v v v 集合,从而计算含该点的合法路径数。

class Solution {
public:
    using ll = long long;

    long long countPaths(int n, vector<vector<int>> &edges) {
        vector<int> isp(n + 1, 1);//isp[i]:i是否是质数
        isp[1] = 0;
        for (int i = 2; i <= n; i++) {//预处理判断数是否是质数
            for (int j = 2; j * j <= i; j++)
                if (i % j == 0) {
                    isp[i] = 0;
                    break;
                }
        }
        vector<vector<int>> e(n + 1);
        for (auto &ei: edges) {//建图
            e[ei[0]].push_back(ei[1]);
            e[ei[1]].push_back(ei[0]);
        }
        vector<ll> cnt_np(n + 1);//以i为根的子树中从i出发只通过非质数点到达的非质数点的数目
        function<int(int, int)> comp_path = [&](int root, int p) {//当前点为root,父节点为p
            if (isp[root]) {//当前点为质数点
                cnt_np[root] = 0;
                for (auto j: e[root])
                    if (j != p)
                        comp_path(j, root);
            } else {//当前点非质数点
                cnt_np[root] = 1;
                for (auto j: e[root])
                    if (j != p)
                        cnt_np[root] += comp_path(j, root);
            }
            return cnt_np[root];
        };
        comp_path(1, 0);
        ll res = 0;
        function<void(int, int, int)> dfs = [&](int root, int p, int up) {//当前点为root,父节点为p,up:从p出发(且不经过当前节点)只通过非质数点能到达的非质数点的数目
            if (isp[root]) {//当前点为质数点
                vector<ll> v;// v集合
                if (up != 0)
                    v.push_back(up);
                for (auto j: e[root])
                    if (j != p) {
                        dfs(j, root, 0);
                        if (cnt_np[j])
                            v.push_back(cnt_np[j]);
                    }
                ll s = 0, s2 = 0;
                for (auto it: v) {
                    s += it;
                    s2 += it * it;
                }
                res += s + (s * s - s2) / 2;//+=含当前质数点的合法路径数目

            } else {//当前点非质数点
                ll s = up + 1;
                for (auto j: e[root])
                    if (j != p && cnt_np[j])
                        s += cnt_np[j];
                for (auto j: e[root])
                    if (j != p)
                        dfs(j, root, s - cnt_np[j]);
            }
        };
        dfs(1, 0, 0);
        return res;
    }
};

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

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

相关文章

【Oracle】Oracle系列之八--SQL查询

文章目录 往期回顾前言1. 基本查询&#xff08;1&#xff09;All&#xff08;2&#xff09;in/exists 子查询&#xff08;3&#xff09;union/except/intersect&#xff08;4&#xff09;group by&#xff08;5&#xff09;having&#xff08;6&#xff09;聚集函数&#xff1a…

SLAM从入门到精通(用c++实现机器人运动控制)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 之前的一篇文章&#xff0c;我们知道了可以通过wpr_simulation包仿真出机器人和现场环境。如果需要控制机器人&#xff0c;这个时候就需要rqt_robo…

AcWing 5153. 删除(AcWing杯 - 周赛)(结论+枚举)

思路&#xff1a; ACcode: #include<bits/stdc.h> using namespace std; #define int long long string s; void solve() {cin>>s;s"00"s;int lens.size();for(int i0; i<len; i) {for(int ji1; j<len; j) {for(int kj1; k<len; k) {int xs[i]*…

leetcode:2446. 判断两个事件是否存在冲突(python3解法)

难度&#xff1a;简单 给你两个字符串数组 event1 和 event2 &#xff0c;表示发生在同一天的两个闭区间时间段事件&#xff0c;其中&#xff1a; event1 [startTime1, endTime1] 且event2 [startTime2, endTime2] 事件的时间为有效的 24 小时制且按 HH:MM 格式给出。 当两个…

Windows 基于Visual Studio 开发Qt 6 连接MySQL 8

前提条件&#xff1a; 1、Visual Studio 2022 社区版(免费版) 2、Qt-6.5.1版本 3、MySQL 8 Qt 6 配置MySQL 8 动态/静态连接库和MySQL 8 驱动。 libmysql.dll 和libmysql.lib是QT所需的动态和静态链接库&#xff1b;qsqlmysql.dll 和qsqlmysql.dll.debug是Qt所需的mysql驱…

机器人过程自动化(RPA)入门 1. 什么是机器人过程自动化?

如今&#xff0c;我们生活中几乎没有任何方面不受自动化的影响。一些例子包括洗衣机、微波炉、汽车和飞机的自动驾驶模式&#xff0c;雀巢在日本的商店里使用机器人销售咖啡豆&#xff0c;沃尔玛在美国测试无人机送货&#xff0c;我们的银行支票使用光学字符识别&#xff08;OC…

【Linux】调试代码的工具 - gdb

1、安装gdb sudo yum -y install gdb【安装gdb】 2、gdb的使用 在 Linux 下&#xff0c;我们编写代码默认以 release 方式发布如果想让代码以 debug 方式发布&#xff0c;必须给 gcc 添加 -g 选项 (gdb) q / quit【退出gdb】(gdb) l / list&#xff08;list可缩写为 l&#xf…

C++的文件操作

文件操作 程序运行时产生的数据都属于临时数据&#xff0c;通过文件可将数据持久化 C中对文件操作需要包含头文件<fstream> 文件类型分为两种&#xff1a; 文本文件 - 文件以文本的ASCII码形式存储在计算机中二进制文件 - 文件以文本的二进制形式存储在计算机中&…

如何取消自动播放音乐:取消手机汽车连上后汽车自动播放音乐?

背景 手机和汽车通过蓝牙连接上之后&#xff0c;汽车音响会自动播放手机上的音乐&#xff0c;似乎是自动唤醒APP的&#xff0c;因为这些音乐APP在手机上是已经被杀了后台的了。 而且汽车的屏幕的播放列表里头会显示播放的音乐的名称&#xff0c;也有可能是视频的名称&#xf…

安卓备份分区----手动查询安卓系统分区信息 导出系统分区的一些基本操作

在玩机搞机过程中。有时候需要手动查看有些分区信息&#xff0c;或者备份分区的操作。那么今天以小米8为例解析下其中的操作步骤 机型&#xff1a;小米8 adb版本&#xff1a;https://developer.android.com/studio/releases/platform-tools 机型芯片&#xff1a;高通骁龙845…

基于微信小程序的校园商铺系统,附源码、数据库

文章目录 第一章 简介第二章 技术栈第三章&#xff1a;总体设计第四章系统详细设计4.1 前台功能模块4.2后台功能模块4.2.1管理员功能模块 五 源码咨询 第一章 简介 今天&#xff0c;为大家带来的事基于微信小程序的校园商铺系统。本系统的主要意义在于&#xff0c;全力以赴为用…

Redis双写一致性、持久化机制、分布式锁

一.双写一致性: 含义:当数据库中的数据被修改了以后&#xff0c;我们也需要同时修改缓存&#xff0c;使缓存和数据库的数据保持一致 &#xff08;1&#xff09;读操作:当请求发来的时候&#xff0c;先去看redis里面是否有对应的数据&#xff0c;如果有直接返回&#xff0c;如果…

轻量级的日志采集组件 Filebeat 讲解与实战操作

文章目录 一、概述二、Kafka 安装三、Filebeat 安装1&#xff09;下载 Filebeat2&#xff09;Filebeat 配置参数讲解3&#xff09;filebeat.prospectors 推送kafka完整配置1、filebeat.prospectors2、processors3、output.kafka 4&#xff09;filebeat.inputs 与 filebeat.pros…

【STL】vector常见用法及模拟实现(附源码)

目录 前言1. vector介绍及使用1.1vector的介绍1.2 vector的使用1.2.1 构造函数 1.2.2 vector对象遍历1.2.3 reserve和resize1.2.4 insert和erase 2. vector模拟实现2.1 vector迭代器失效问题2.2 模拟实现reserve函数浅拷贝问题2.3模拟实现源码2.3.1 vector.h2.3.2 test.cpp 前言…

org.postgresql.util.PSQLException: Bad value for type long

项目用 springbootmybatis mybatisplus&#xff0c; 数据库是&#xff1a;postgresql 。 执行查询时候返回错误。 org.springframework.dao.DataIntegrityViolationException: Error attempting to get column city_id from result set. Cause: org.postgresql.util.PSQLExce…

如何让ChatGPT为留学生所用?

“我们这一届学Data Analyics和Data Science的没一个找到工作的。”朋友饭桌上的闲话让研究生才算踏入DA圈子的我瑟瑟发抖。 还没开始正式求职的我&#xff0c;似乎已经被宣告失业了。而这一切都要“归功”于以ChatGPT为代表的大语言模型&#xff08;LLMs&#xff09;。 问世不…

接口测试练习步骤

在接触接口测试过程中补了很多课&#xff0c; 终于有点领悟接口测试的根本&#xff1b; 偶是个实用派&#xff5e;&#xff0c;那么现实中没有用的东西&#xff0c;基本上我都不会有很大的概念&#xff1b; 下面给的是接口测试的统一大步骤&#xff0c;其实就是让我们对接口…

第9章 【MySQL】InnoDB的表空间

表空间 是一个抽象的概念&#xff0c;对于系统表空间来说&#xff0c;对应着文件系统中一个或多个实际文件&#xff1b;对于每个独立表空间来说&#xff0c;对应着文件系统中一个名为 表名.ibd 的实际文件。大家可以把表空间想象成被切分为许许多多个 页 的池子&#xff0c;当我…

机器学习之正则化与验证提高模型泛化

文章目录 正则化&#xff08;Regularization&#xff09;&#xff1a;验证&#xff08;Validation&#xff09;&#xff1a; 正则化和验证是机器学习中重要的概念&#xff0c;它们帮助提高模型的性能和泛化能力。让我详细介绍一下这两个概念&#xff1a; 正则化&#xff08;Re…

【Git】轻松学会 Git:深入理解 Git 的基本操作

文章目录 前言一、创建 Git 本地仓库1.1 什么是仓库1.2 创建本地仓库1.3 .git 目录结构 二、配置 Git三、认识 Git 的工作区、暂存区和版本库3.1 什么是 Git 的工作区、暂存区和版本库3.2 工作区、暂存区和版本库之间的关系 四、添加文件4.1 添加文件到暂存区和版本库中的命令4…