第 365 场 LeetCode 周赛题解

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.rhkb.cn/news/146773.html

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

相关文章

Python|OpenCV-如何给目标图像添加边框(7)

前言 本文是该专栏的第7篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 在使用opencv处理图像的时候,会不可避免的对图像的一些具体区域进行一些操作。比如说,想要给目标图像创建一个围绕图像的边框。简单的来说,就是在图片的周围再填充一个粗线框。具体效果,…

笔记二:odoo搜索、筛选和分组

一、搜索 1、xml代码 <!--搜索和筛选--><record id"view_search_book_message" model"ir.ui.view"><field name"name">book_message</field><field name"model">book_message</field><field…

【Java 进阶篇】JDBC ResultSet 类详解

在Java应用程序中&#xff0c;与数据库交互通常涉及执行SQL查询以检索数据。一旦执行查询&#xff0c;您将获得一个ResultSet对象&#xff0c;该对象包含查询结果的数据。本文将深入介绍ResultSet类&#xff0c;它是Java JDBC编程中的一个核心类&#xff0c;用于处理查询结果。…

几个推荐程序员养成的好习惯

本文框架 前言case1 不想当然case2 不为了解决问题而解决问题case3 不留问题死角case4 重视测试环节 前言 中秋国庆双节至&#xff0c;旅行or回乡探亲基本是大家的选择&#xff0c;看看风景或陪陪家人确实是个难得的机会。不过我的这次假期选择了闭关&#xff0c;不探亲&#…

layuiselect设置为不可下拉选取

$("#exam").siblings(".layui-form-select").find("dl").remove(); 或 layuiSelectDisable($("#exam")); // 设置selet元素不可下拉选择function layuiSelectDisable(selectElem) {try {var dlElem selectElem.siblings(".layu…

消息队列-RabbitMQ(二)

接上文《消息队列-RabbitMQ&#xff08;一&#xff09;》 Configuration public class RabbitMqConfig {// 消息的消费方json数据的反序列化Beanpublic RabbitListenerContainerFactory<?> rabbitListenerContainerFactory(ConnectionFactory connectionFactory){Simple…

如何用画图将另一个图片中的成分复制粘贴?

一、画图是什么&#xff1f; 画图是Windows自带的一个附件&#xff0c;可于菜单中的Windows附件文件夹中找到&#xff08;自带的为2D画图&#xff0c;有需要的可以下载3D画图&#xff09;&#xff0c;可以用来编辑或查看图片&#xff0c;也可以用来绘制图片&#xff0c;并将图…

扫地机器人经营商城小程序的作用是什么

扫地机器人对人们生活大有帮助&#xff0c;近些年也有不少企业开创品牌&#xff0c;在电商平台每年销量也非常高&#xff0c;同行竞争激烈及私域化程度加深情况下&#xff0c;虽然第三方平台或线下方式也有生意&#xff0c;但互联网电商发展也为商家们带来了诸多痛点。 那么通…

Ant-Design-Vue:a-range-picker组件国际化配置

在使用Ant-Design-Vue中的时间范围选择器开发个人项目时&#xff0c;发现默认显示为英文。如何解决呢&#xff1f; date-picker分类 Antd-Vue提供了DatePicker、MonthPicker、RangePicker、WeekPicker 几种类型的时间选择器&#xff0c;分别用于选择日期、月份、日期范围、周范…

TensorFlow入门(一、环境搭建)

一、下载安装Anaconda 下载地址:http://www.anaconda.comhttp://www.anaconda.com 下载完成后运行exe进行安装 二、下载cuda 下载地址:http://developer.nvidia.com/cuda-downloadshttp://developer.nvidia.com/cuda-downloads 下载完成后运行exe进行安装 安装后winR cmd进…

快速开发微信小程序之一登录认证

一、背景 记得11、12年的时候大家一窝蜂的开始做客户端Android、IOS开发&#xff0c;我是14年才开始做Andoird开发&#xff0c;干了两年多&#xff0c;然后18年左右微信小程序火了&#xff0c;我也做了两个小程序&#xff0c;一个是将原有牛奶公众号的功能迁移到小程序&#x…

CSS基础语法第二天

目录 一、复合选择器 1.1 后代选择器 1.2 子代选择器 1.3 并集选择器 1.4 交集选择器 1.4.1超链接伪类 二、CSS特性 2.1 继承性 2.2 层叠性 2.3 优先级 基础选择器 复合选择器-叠加 三、Emmet 写法 3.1HTML标签 3.2CSS 四、背景属性 4.1 背景图 4.2 平铺方式 …

(Note)机器学习面试题

机器学习 1.两位同事从上海出发前往深圳出差&#xff0c;他们在不同时间出发&#xff0c;搭乘的交通工具也不同&#xff0c;能准确描述两者“上海到深圳”距离差别的是&#xff1a; A.欧式距离 B.余弦距离 C.曼哈顿距离 D.切比雪夫距离 S:D 1. 欧几里得距离 计算公式&#x…

2023.10.02 win7x64sp1下Navicat_Premium15_x86连接Oracle_10g(安装在win2003x86)

Oracle_10g安装在这个版本的系统里: Microsoft Windows [版本 5.2.3790] 这个win2003_x86(分配内存1G)安装在vmware虚拟机里. 安装包文件名为:oracle 10g_win32.zip 大小约624 MB (655,025,354 字节) 安装完毕后,tcp1521端口应该开放: Microsoft Windows [版本 5.2.3790]…

网络工程师就业和身高有关系吗

大家好&#xff0c;我是网络工程师成长日记实验室的郑老师&#xff0c;您现在正在查看的是网络工程师成长日记专栏&#xff0c;记录网络工程师日常生活的点点滴滴 一个哥们问我说&#xff0c;他说他现在准备学网络工程师&#xff0c;但是他男生&#xff0c;他说他个子不是太高。…

IDEA的使用

文章目录 1.IDEA配置1.1 idea界面说明1.2 git1.3 JDK1.4 maven1.5 Tomcat1.6 idea设置编码格式1.7 vscodenodejs1.8 windows下安装redis 2. IDEA问题2.1 setAttribute方法爆红2.2 idea cannot download sources解决办法2.3 springboot项目跑起来不停run 3. vscode3.1 vscode显示…

ThreeJS - 封装一个GLB模型展示组件(TypeScript)

一、引言 最近基于Three.JS&#xff0c;使用class封装了一个GLB模型展示&#xff0c;支持TypeScript、支持不同框架使用&#xff0c;具有多种功能。 &#xff08;下图展示一些基础的功能&#xff0c;可以自行扩展&#xff0c;比如光源等&#xff09; 二、主要代码 本模块依赖…

博客无限滚动加载(html、css、js)实现

介绍 这是一个简单实现了类似博客瀑布流加载功能的页面&#xff0c;使用html、css、js实现。简单易懂&#xff0c;值得学习借鉴。&#x1f44d; 演示地址&#xff1a;https://i_dog.gitee.io/easy-web-projects/infinite_scroll_blog/index.html 代码 index.html <!DOCT…

Mac上如何修复损坏的音频?试试iZotope RX 10,对音频进行处理,提高音频质量!

iZotope RX 10是一款由iZotope公司开发的音频修复和编辑软件。它被广泛用于电影、电视、音乐和游戏等行业的音频后期制作&#xff0c;以及声音设计和修复工作。 在RX 10中&#xff0c;iZotope从头开始重新设计了全新的Repair Assistant修复助手&#xff0c;并且推出了相应的修…

Echarts 教程一

Echarts 教程一 可视化大屏幕适配方案可视化大屏幕布局方案Echart 图表通用配置部分解决方案1. titile2. tooltip3. xAxis / yAxis 常用配置4. legend5. grid6. series7.color Echarts API 使用全局echarts对象echarts实例对象 可视化大屏幕适配方案 rem flexible.js 关于flex…