当前位置: 首页 > news >正文

Leetcode 第 365 场周赛题解

Leetcode 第 365 场周赛题解

  • Leetcode 第 365 场周赛题解
    • 题目1:2873. 有序三元组中的最大值 I
      • 思路
      • 代码
      • 复杂度分析
    • 题目2:2874. 有序三元组中的最大值 II
      • 思路
      • 代码
      • 复杂度分析
      • 思路2
    • 题目3:2875. 无限数组的最短子数组
      • 思路
      • 代码
      • 复杂度分析
    • 题目4:2876. 有向图访问计数

Leetcode 第 365 场周赛题解

题目1:2873. 有序三元组中的最大值 I

思路

暴力。

代码

/** @lc app=leetcode.cn id=2873 lang=cpp** [2873] 有序三元组中的最大值 I*/// @lc code=start
class Solution
{
public:long long maximumTripletValue(vector<int> &nums){int n = nums.size();long long ans = INT_MIN;for (int i = 0; i < n - 2; i++)for (int j = i + 1; j < n - 1; j++)for (int k = j + 1; k < n; k++)ans = max(ans, (long long)(nums[i] - nums[j]) * nums[k]);return ans >= 0 ? ans : 0;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n3),其中 n 是数组 nums 的长度。

空间复杂度:O(1)。

题目2:2874. 有序三元组中的最大值 II

思路

枚举 k,我们需要知道 k 左边 nums[i]−nums[j] 的最大值。

使用 pre_max 维护 k 之前的 nums[i] 的最大值,使用 max_diff 维护 nums[i]−nums[j] 的最大值。

每次遍历一个 nums[i],都更新 ans,pre_max,max_diff:

  1. ans = max(ans, (long long)max_diff * nums[i])
  2. max_diff = max(max_diff, pre_max - nums[i])
  3. pre_max = max(pre_max, nums[i])

最后 return ans >= 0 ? ans : 0 即为答案。

代码

/** @lc app=leetcode.cn id=2874 lang=cpp** [2874] 有序三元组中的最大值 II*/// @lc code=start
class Solution
{
public:long long maximumTripletValue(vector<int> &nums){int n = nums.size();long long ans = INT_MIN;int max_diff = 0, pre_max = 0;for (int i = 0; i < n; i++){ans = max(ans, (long long)max_diff * nums[i]);max_diff = max(max_diff, pre_max - nums[i]);pre_max = max(pre_max, nums[i]);}return ans >= 0 ? ans : 0;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 是数组 nums 的长度。

空间复杂度:O(1)。

思路2

枚举 j

pre_max 数组维护 nums[i] 的最大值。

max_suffix 数组维护 nums[k] 的最大值。

更新 ans = max(ans, (long long)(pre_max[j - 1] - nums[j]) * max_suffix[j + 1])。

最后 return ans >= 0 ? ans : 0 即为答案。

class Solution
{
public:long long maximumTripletValue(vector<int> &nums){int n = nums.size();long long ans = INT_MIN;vector<int> pre_max(n, 0);pre_max[0] = nums[0];for (int i = 1; i < n; i++)pre_max[i] = max(pre_max[i - 1], nums[i]);vector<int> max_suffix(n, 0);max_suffix[n - 1] = nums[n - 1];for (int i = n - 2; i >= 0; i--)max_suffix[i] = max(max_suffix[i + 1], nums[i]);for (int j = 1; j < n - 1; j++)ans = max(ans, (long long)(pre_max[j - 1] - nums[j]) * max_suffix[j + 1]);return ans >= 0 ? ans : 0;}
};

题目3:2875. 无限数组的最短子数组

思路

滑动窗口。

设数组 nums 的总和为 total,长度为 n。

已知数组 infinite_nums 是通过无限地将 nums 的元素追加到自己之后生成的。

假设有下面这种情况:

在这里插入图片描述

去掉中间一整段完整的 nums 数组,新的目标值为 target % total。

问题转化为在 nums + nums[1,…,n-1] 这个长度为 2 * n - 1 的数组上,求满足元素和 等于 target % total 的最短子数组,设这个长度为 len。

加上 target / total 个完整数组的长度,最终的长度为 len + target / total * n。

代码

/** @lc app=leetcode.cn id=2875 lang=cpp** [2875] 无限数组的最短子数组*/// @lc code=start// 滑动窗口class Solution
{
public:int minSizeSubarray(vector<int> &nums, int target){int n = nums.size();long long total = accumulate(nums.begin(), nums.end(), 0LL);for (int i = 0; i < n - 1; i++)nums.push_back(nums[i]);long long sum = 0;int left = 0, len = INT_MAX;for (int right = 0; right < 2 * n - 1; right++){sum += nums[right];while (sum > target % total){sum -= nums[left];left++;}int cur_len = right - left + 1;if (sum == target % total)len = min(len, cur_len);}return len == INT_MAX ? -1 : len + target / total * n;}
};
// @lc code=end

复杂度分析

时间复杂度:O(n),其中 n 为 nums 数组的长度。

空间复杂度:O(n),延长了 nums 数组。

题目4:2876. 有向图访问计数

超出能力范围。

题解:【模板】内向基环树

相关文章:

Leetcode 第 365 场周赛题解

Leetcode 第 365 场周赛题解 Leetcode 第 365 场周赛题解题目1&#xff1a;2873. 有序三元组中的最大值 I思路代码复杂度分析 题目2&#xff1a;2874. 有序三元组中的最大值 II思路代码复杂度分析思路2 题目3&#xff1a;2875. 无限数组的最短子数组思路代码复杂度分析 题目4&a…...

什么是软件测试? 软件测试都有什么岗位 ?软件测试和调试的区别? 软件测试和开发的区别?软件测试等相关概念入门篇

1、什么是软件测试&#xff1f; 常见理解&#xff1a; 软件测试就是找BUG&#xff0c;发现缺陷 真正理解&#xff1a; 软件测试就是验证软件产品特性是否满足用户的需求 测试定义&#xff1a; 测试人员验证软件是否符合需求的这个过程就是测试 2、为什么要有测试 标准情况下&a…...

VI/VIM的使用

1、vi的基本概念   基本上vi可以分为三种状态&#xff0c;分别是命令模式&#xff08;command mode&#xff09;、插入模式&#xff08;Insert mode&#xff09;和底行模式&#xff08;last line mode&#xff09;&#xff0c;各模式的功能区分如下&#xff1a; 1) 命令行模…...

【虹科干货】Redis Enterprise vs ElastiCache——如何选择缓存解决方案?

使用Redis 或 Amazon ElastiCache 来作为缓存加速已经是业界主流的解决方案&#xff0c;二者各有什么优势&#xff1f;又有哪些区别呢&#xff1f; 文况速览&#xff1a; - Redis 是什么&#xff1f; - Redis Enterprise 是什么&#xff1f; - Amazon ElastiCache 是什么&…...

2.2.2 交换机间相同vlan的通信

实验2.2.2 交换机间相同vlan的通信 一、任务描述二、任务分析三、实验拓扑四、具体要求五、任务实施1.设置交换机的名称&#xff0c;创建VLAN&#xff0c;配置access并分配接口。对两台交换机进行相同的VLAN划分&#xff0c;下面是SWA配置过程&#xff0c;同理可实现SWB的配置。…...

C的魅力在于指针

原有的adrv9025 代理框架很好用,在其原有的平台上做改进...

【Linux常用命令14】Linux系统监控常用命令

proc文件系统 /proc/cmdline 加载kernel时的相关指令与参数 /proc/cpuinfo CPU相关信息&#xff0c;包含频率、类型与运算功能 /proc/devices 记录了系统各个主要设备的主设备号码 /proc/filesystems 记录系统加载的文件系统 /proc/loadavg 平均负载值 top看到就是这个 /proc/…...

Python Watchdog:高效的文件系统监控

1. 写在前面 在软件开发中&#xff0c;有时候需要通过 Python 去监听指定区域文件或目录的创建、修改&#xff0c;或者删除&#xff0c;从而引发特定的事件处理。本篇博客为你介绍第三方模块 Watchdog 实现对文件事件的监控。 公众号&#xff1a; 滑翔的纸飞机 2. Watchdog 2…...

C++中多态的原理【精华】

虚函数表 通过一道题我们先感受一下编译器针对多态的处理 #include <iostream> using namespace std;class Base { public:virtual void Func1(){cout << "Func1()" << endl;} private:int _b 1;char _c };int main() {cout << sizeof(B…...

亿赛通电子文档安全管理系统 Update.jsp SQL注入

目录 0x01 漏洞介绍 0x02 影响产品 0x03 语法特征 0x04 漏洞复现页面 0x05 漏洞修复建议 0x01 漏洞介绍 亿赛通电子文档安全管理系统是国内最早基于文件过滤驱动技术的文档加解密产品之一&#xff0c;保护范围涵盖终端电脑&#xff08;Windows、Mac、Linux系统平台&#…...

神经网络中的反向传播:综合指南

塔曼纳 一、说明 反向传播是人工神经网络 &#xff08;ANN&#xff09; 中用于训练深度学习模型的流行算法。它是一种监督学习技术&#xff0c;用于调整网络中神经元的权重&#xff0c;以最小化预测输出和实际输出之间的误差。 在神经网络中&#xff0c;反向传播是计算损失函数…...

协同创新、奔赴未来——“华为云杯”2023人工智能创新应用大赛华丽谢幕

9月27日&#xff0c;在苏州工业园区管理委员会、华为云计算技术有限公司的指导下&#xff0c;由SISPARK&#xff08;苏州国际科技园&#xff09;、华为&#xff08;苏州&#xff09;人工智能创新中心联合主办&#xff0c;东北大学工业智能与系统优化国家级前沿科学中心、浙江大…...

介绍Node.js中fs模块 代码和注释。

Node.js中的fs模块提供了一些用于文件系统操作的API&#xff0c;包括文件读写、目录操作等。 读取文件 使用fs.readFile()方法可以读取文件内容。该方法的第一个参数是文件路径&#xff0c;第二个参数是可选的选项对象&#xff0c;第三个参数是回调函数。回调函数的第一个参数…...

【QT 读取JSON】 深入浅出 使用QT内置的QJson模块解析Json文件 匠心之作

目录 0 引言1 Json数据分析2 解析Json数据 &#x1f64b;‍♂️ 作者&#xff1a;海码007&#x1f4dc; 专栏&#xff1a;QT专栏&#x1f4a5; 标题&#xff1a;【QT 读取JSON】 使用QT内置的QJson模块解析Json文件❣️ 寄语&#xff1a;人生的意义或许可以发挥自己全部的潜力&…...

初识javaweb2 tomcat

如果是tomcat启动成功却无法通过localhost:8080进入页面&#xff0c;先去查看是否是端口号被占用&#xff0c; 再用命令中断占用的进程&#xff0c;如果简单的命令窗口无法中断&#xff0c;切换到管理员身份运行即可 netstat -ano|findstr "8080" 查看那个进程占用了…...

使用OPENROWSET :在一个数据库中查询另一个数据库的数据

当你需要在一个数据库中查询另一个数据库的数据时&#xff0c;SQL Server提供了多种方法来实现这一目标。一种常见的方法是使用链接服务器&#xff08;Linked Server&#xff09;&#xff0c;另一种方法是使用 OPENROWSET 函数。本篇博客将重点介绍如何使用 OPENROWSET 函数在当…...

基于STM32设计的智慧农业管理系统(ESP8266+腾讯云微信小程序)

一、项目介绍 基于STM32设计的智慧农业控制系统(ESP8266+腾讯云微信小程序) 1.1 项目背景 随着人们对食品安全和生态环境的日益重视,智慧农业逐渐成为一个备受关注的领域。智能化管理可以提高农业生产效率,减少资源浪费,改善生态环境。因此,基于物联网技术的智慧农业管理系…...

Flutter视图原理之三棵树的建立过程

目录 三棵树的关系树的构建过程1.updateChild函数&#xff08;element的复用&#xff09;2.inflateWidget函数3.mount函数3.1 componentElement的实现3.2 RenderObjectElement的实现3.2.1 attachRenderObject函数 4.performRebuild函数 总结三棵树创建流程 三棵树的关系 Flutt…...

详细解析冒泡排序,JS如何基本实现的。

目录 冒泡排序是什么: 使用冒泡排序是为了什么: DEMO示例: 冒泡排序是什么: 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的比较排序算法&#xff0c;它通过多次遍历待排序的元素&#xff0c;比较相邻元素的大小&#xff0c;如果它们的顺序不正确就交换它们&…...

如何消除CSDN博文代码中自动添加的行号

哪里有自定义目录标题 编写CSDN博文&#xff0c;使用代码块的linux命令行&#xff0c;预览时没有代码行号&#xff0c;但发布文章后自动添加了行号。 git clone https://github.com/mikel-brostrom/yolo_tracking.git cd yolo_tracking pip install -v -e .为什么预览和发布的…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

PL0语法,分析器实现!

简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

安卓基础(Java 和 Gradle 版本)

1. 设置项目的 JDK 版本 方法1&#xff1a;通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分&#xff0c;设置 Gradle JDK 方法2&#xff1a;通过 Settings File → Settings... (或 CtrlAltS)…...

Java中HashMap底层原理深度解析:从数据结构到红黑树优化

一、HashMap概述与核心特性 HashMap作为Java集合框架中最常用的数据结构之一&#xff0c;是基于哈希表的Map接口非同步实现。它允许使用null键和null值&#xff08;但只能有一个null键&#xff09;&#xff0c;并且不保证映射顺序的恒久不变。与Hashtable相比&#xff0c;Hash…...