第 365 场 LeetCode 周赛题解

news2024/12/23 20:57:24

A 有序三元组中的最大值 I

在这里插入图片描述

参考 B B B 题做法…

class Solution {
public:
    using ll = long long;

    long long maximumTripletValue(vector<int> &nums) {
        int n = nums.size();
        vector<int> suf(n);
        partial_sum(nums.rbegin(), nums.rend(), suf.rbegin(), [](int x, int y) { return max(x, y); });
        ll res = 0;
        for (int mx = nums[0], j = 1; j < n - 1; j++) {
            if (mx > nums[j])
                res = max(res, 1LL * (mx - nums[j]) * suf[j + 1]);
            mx = max(mx, nums[j]);
        }
        return res;
    }
};

B 有序三元组中的最大值 II

在这里插入图片描述

枚举:预处理求出 p r e [ j − 1 ] = m a x { n u m s [ k ]    ∣    0 < k < j } pre[j-1]=max\{ nums[k] \; | \; 0<k<j \} pre[j1]=max{nums[k]0<k<j} s u f [ j + 1 ] = m a x { n u m s [ k ]    ∣    j < k < n u m s . s i z e ( ) } suf[j+1]=max\{ nums[k] \;| \; j<k<nums.size() \} suf[j+1]=max{nums[k]j<k<nums.size()},枚举下标 j j j ,则三元组中间位置为 j j j 的三元组的最大值为 ( p r e [ j − 1 ] − n u m s [ j ] ) × s u f [ j + 1 ] (pre[j-1]-nums[j])\times suf[j+1] (pre[j1]nums[j])×suf[j+1]

class Solution {
public:
    using ll = long long;

    long long maximumTripletValue(vector<int> &nums) {
        int n = nums.size();
        vector<int> suf(n);//最大值后缀数组
        partial_sum(nums.rbegin(), nums.rend(), suf.rbegin(), [](int x, int y) { return max(x, y); });
        ll res = 0;
        for (int mx = nums[0], j = 1; j < n - 1; j++) {//mx即为pre[j-1]
            if (mx > nums[j])
                res = max(res, 1LL * (mx - nums[j]) * suf[j + 1]);
            mx = max(mx, nums[j]);
        }
        return res;
    }
};

C 无限数组的最短子数组

在这里插入图片描述

双指针:设数组元素和为 s s s ,若 t a r g e t % s = = 0 target\%s==0 target%s==0,则答案为 t a r g e t s × n u m s . s i z e ( ) \frac {target} {s}\times nums.size() starget×nums.size(),否则问题可以转化为:在数组中找一个子数组或一个前缀加一个后缀,使得找到的元素数尽量少且元素和为 t a r g e t % s target\%s target%s

class Solution {
public:
    using ll = long long;

    int minSizeSubarray(vector<int> &nums, int target) {
        ll s = accumulate(nums.begin(), nums.end(), 0LL);
        int n = nums.size();
        int res0 = target / s * n;//覆盖完整数组的元素数
        target %= s;
        if (target == 0)
            return res0;
        vector<ll> pre(n), suf(n);//pre:前缀和数组, suf:后缀和数组
        partial_sum(nums.begin(), nums.end(), pre.begin(), [](int x, int y) { return (ll) x + (ll) y; });
        partial_sum(nums.rbegin(), nums.rend(), suf.rbegin(), [](int x, int y) { return (ll) x + (ll) y; });
        int res1 = INT32_MAX;
        for (int l = 0, r = 0; l < n; l++) {//一个前缀加一个后缀的情况
            while (r + 1 < n && pre[l] + suf[r + 1] >= target)
                r++;
            if (pre[l] + suf[r] == target)
                res1 = min(res1, l + 1 + n - r);
        }
        for (int l = 0, r = 0; r < n; r++) {//子数组的情况
            while (l + 1 <= r && pre[r] - pre[l] >= target)
                l++;
            if ((l != 0 ? pre[r] - pre[l - 1] : pre[r]) == target)
                res1 = min(res1, r - l + 1);
        }
        return res1 == INT32_MAX ? -1 : res0 + res1;
    }
};

D 有向图访问计数

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

拓扑排序+ d f s dfs dfs :所述有向图对应的无向图中每个连通分支一定是一个环加若干链的结构,一个点能访问的节点总数为:该点在无向图中所属连通分支的环的大小+该点到环上节点的最小距离。通过拓扑排序求出哪些节点在环上,然后可以求出每个环的大小,再从环上的节点在反向图上跑 d f s dfs dfs ,求出对应链上节点与环上节点的最小距离。

class Solution {
public:
    vector<int> countVisitedNodes(vector<int> &edges) {
        int n = edges.size();
        vector<vector<int>> e_(n);//反向图的邻接表
        vector<int> indegree(n);//入度
        for (int i = 0; i < n; i++) {
            indegree[edges[i]]++;
            e_[edges[i]].push_back(i);
        }
        queue<int> q;
        for (int i = 0; i < n; i++)
            if (!indegree[i])
                q.push(i);
        vector<int> is_out(n);//是否在环外
        while (!q.empty()) {//拓扑排序求出环外的点
            int cur = q.front();
            q.pop();
            is_out[cur] = 1;
            if (--indegree[edges[cur]] == 0)
                q.push(edges[cur]);
        }
        vector<int> size_ring(n, -1);//各节点所在环的大小
        for (int i = 0; i < n; i++)//计算各个环的大小
            if (!is_out[i] && size_ring[i] == -1) {//-1为初始化标志(一个环只用遍历一次)
                int m = 0;
                for (int cur = i;;) {
                    m++;
                    cur = edges[cur];
                    if (cur == i)
                        break;
                }
                for (int cur = i;;) {
                    size_ring[cur] = m;
                    cur = edges[cur];
                    if (cur == i)
                        break;
                }
            }
        vector<int> res(n);
        function<void(int, int, int)> dfs = [&](int cur, int dis, int len_ring) {//cur: 当前节点, dis: 距离环中节点的最小距离, len_ring: 环的大小
            res[cur] = dis + len_ring;
            for (auto j: e_[cur])
                if (is_out[j])
                    dfs(j, dis + 1, len_ring);
        };
        for (int i = 0; i < n; i++)
            if (!is_out[i])
                dfs(i, 0, size_ring[i]);
        return res;
    }
};

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

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

相关文章

Facebook Delos 中的虚拟共识协议

背景 Facebook 的软件系统栈一般包括两层&#xff1a;上层是数据平面&#xff0c; 下层是控制平面。 facebook software stack 数据平面包括大量的服务&#xff0c;他们需要存储和处理海量数据。控制平面用来支撑数据平面&#xff0c;起到一些控制作用&#xff1a;调度、配置…

XSS-labs

XSS常见的触发标签_xss标签_H3rmesk1t的博客-CSDN博客 该补习补习xss漏洞了 漏洞原理 网站存在 静态 和 动态 网站 xss 针对的网站 就是 动态网站 动态网站会根据 用户的环境 与 需求 反馈出 不同的响应静态页面 代码写死了 只会存在代码中有的内容 通过动态网站 用户体…

2023年中国火化设备行业现状分析:随着城市化进程的推进,市场需求将持续增长[图]

火化设备行业是指生产和提供用于尸体火化处理的设备和相关服务的行业。火化设备主要用于将尸体进行高温焚烧&#xff0c;将尸体转化为骨灰&#xff0c;以达到尸体处理和殡葬的目的。 火化设备行业优点 资料来源&#xff1a;共研产业咨询&#xff08;共研网&#xff09; 我国火…

C++面试八股(一)

目录 C和C的区别 1、语言特性 2、内存管理 3、C的库更加丰富 4、对异常的处理 什么是封装继承多态&#xff1f; 封装 继承 多态 new和malloc的区别 STL容器有哪些&#xff1f;容器对应的使用场景&#xff1f;&#xff08;挑一个你认为最熟悉的容器&#xff09; vector、…

评估指标Pre\Rec\F1\AUC

AUC的计算方法同时考虑了分类器对于正例和负例的分类能力&#xff0c;在样本不平衡的情况下&#xff0c;依然能够对分类器作出合理的评价。AUC代表模型预估样本之间的排序关系&#xff0c;即正负样本之间预测的gap越大&#xff0c;auc越大. 来自 https://blog.csdn.net/pearl8…

wustctf2020_name_your_cat

wustctf2020_name_your_cat Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000)32位&#xff0c;开了NX和canary int shell() {return system("/bin/sh"); }有个后门函数 unsigned int…

AutoHotkey ---- 统一所有软件的快捷键(分析篇)

文章目录 引言理论编程方案 引言 快捷键大家都不陌生.但是目前的快捷键普遍存在以下几个问题。 不统一,即word、ppt、浏览器、各种编辑器、邮件客户端等等&#xff0c;都有属于自己的一套快捷键。快捷键冲突&#xff0c;即不同软件使用了相同的快捷键&#xff0c;而且作用域是…

GNN PyG~torch_geometric 学习理解

目录 1. PyG Introduction 2. PyG Installation 2.1 PyG 安装常见错误及原因 2.2 PyG 具体安装步骤 3. torch_geometric packages torch_geometric.data.Data Dataset 与 DataLoader Dropout、BatchNorm 3. torch_geometric: 理解edge_index 3.1 理解 mini-batch edg…

[H5动画制作系列]帧代码运行顺序测试

刚开始接触Animate CC(过去叫:Flash),对于帧代码的执行顺序十分迷惑。所以,专门做一个简单代码顺序测试. 准备工作: 代码图层actions,第1帧和第10帧为关键帧。 背景图层bg,就一个字符串红色Test.界面如下: 代码测试步骤: 第1帧参考代码如下: 第10帧参考代码如下: …

​68条萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

​68条萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书 ​68条萝卜刀《乡村振兴战略下传统村落文化旅游设计》许少辉八一新书

打包python模块代码到pypi

python中&#xff0c;我们会在自己业务中&#xff0c;重复性的使用某些功能。我们可以把这些公用的模块&#xff0c;打包上传&#xff0c;然后给需要的人使用&#xff0c;pypi给我们提供了这个机会 本期目录 一、准备工作 二、编写文件 三、上传下载 一、准备工作 1、需要git…

k8s实战案例之部署Nginx+Tomcat+NFS实现动静分离

1、基于镜像分层构建及自定义镜像运行Nginx及Java服务并基于NFS实现动静分离 1.1、业务镜像设计规划 根据业务的不同,我们可以导入官方基础镜像,在官方基础镜像的基础上自定义需要用的工具和环境,然后构建成自定义出自定义基础镜像,后续再基于自定义基础镜像,来构建不同服…

软件测试之Python基础学习

目录 一、Python基础 Python简介、环境搭建及包管理 Python简介 环境搭建 包管理 Python基本语法 缩进(Python有非常严格的要求) 一行多条语句 断行 注释 变量 基本数据类型(6种) 1. 数字Number 2. 字符串String 3. 列表List 4. 元组Tuple 序列相关操作方法 …

Unity 鼠标悬浮时文本滚动(Text Mesh Pro)

效果 直接将脚本挂载在Text Mesh Pro上&#xff0c;但是需要滚动的文本必须在Scroll View中&#xff0c;否侧会定位错误&#xff0c;还需要给Scroll View中看需求添加垂直或者水平布局的组件 代码 using System.Collections; using System.Collections.Generic; using UnityE…

【生物信息学】使用谱聚类(Spectral Clustering)算法进行聚类分析

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 3. IDE 三、实验内容 0. 导入必要的工具 1. 生成测试数据 2. 绘制初始数据分布图 3. 循环尝试不同的参数组合并计算聚类效果 4. 输出最佳参数组合 5. 绘制最佳聚类结果图 6. 代码整合 一、实验介绍…

【BLIP/BLIP2/InstructBLIP】一篇文章快速了解BLIP系列(附代码讲解说明)

文章目录 BLIP系列1. BLIP1.1 动机1.2 整体架构1.3 损失函数1.4 Captioning and Filtering(CapFilt)1.4.1 Why&#xff1f;1.4.2 方法 2. BLIP22.1 Q-Former的设计2.2 实现功能2.2.1 图像文本检索(Image-Text Retrieval)2.2.2 图像字幕(Image Captioning)2.2.3 视觉问答(VQA)2.…

1. Flink程序打Jar包

文章目录 步骤注意事项 步骤 用 maven 打 jar 包&#xff0c;需要在 pom.xml 文件中添加打包插件依赖 <build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-shade-plugin</artifactId><ver…

Python绘图系统24:绘图类型和坐标映射的关系

文章目录 类别与轴数坐标类别对映射的影像绘图类别对坐标轴的影响源代码 Python绘图系统&#xff1a; 前置源码&#xff1a; Python打造动态绘图系统&#x1f4c8;一 三维绘图系统 &#x1f4c8;二 多图绘制系统&#x1f4c8;三 坐 标 轴 定 制&#x1f4c8;四 定制绘图风格 &a…

CV面试知识点总结

一.卷积操作和图像处理中的中值滤波操作有什么区别&#xff1f; 1.1卷积操作 卷积操作是一种线性操作&#xff0c;通常用于特征的提取&#xff0c;通过卷积核的加权求和来得到新的像素值。1.2中值滤波 原文&#xff1a; https://blog.csdn.net/weixin_51571728/article/detai…

英飞凌Tricore原理及应用介绍06_系统定时器(STM)模块详解

目录 1.概述2 STM外设基本介绍3. STM模块使用原理3.1 64位数据如何同步读取?3.2 比较寄存器的原理?1.概述 STM全称为System Timer即系统定时器模块,在英飞凌Tricore芯片中,每个单独的CPU操作系统中配备一个系统定时器,为其操作系统程序调度提供时钟基础,在整个大系统中,…