Leetcode 第 365 场周赛题解

news2025/1/12 3:46:28

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. 有向图访问计数

超出能力范围。

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

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

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

相关文章

Oracle的立场:官网更换首页与以色列站在一起

Oracle公司的官网&#xff0c;更换了首页内容&#xff0c;明确表明立场&#xff1a;Oracle与以色列站在一起。 声明指出&#xff1a; Oracle谴责针对以色列及其公民的恐怖袭击。Oracle将为其员工、以色列政府和国防机构提供一切必要的支持。 Magen David Adom是一家为以色列公民…

Java代码审计-因酷网校在线教育系统-越权漏洞分析

登录个人账号后&#xff0c;点击基本资料。有更新资料的功能。 查看这个页面的html源码&#xff0c;进行代码审计。&#xff08;这点怎么通过源码怎么找到的就不提了&#xff0c;写上实在啰嗦了。&#xff09; 代码jsp页面源码如下&#xff0c;查看这个表单信息 注意&#xf…

【Mysql】Mysql中的B+树索引

概述 从上一章节我们了解到InnoDB 的数据页都是由7个部分组成&#xff0c;然后各个数据页之间可以组成一个双向链表 &#xff0c;而每个数据页中的记录会按照主键值从小到大的顺序组成一个单向链表 &#xff0c;每个数据页都会为存储在它里边儿的记录生成一个页目录 &#xff…

【AIGC核心技术剖析】大型语言和视觉助手——LLaVA(论文+源码)

🔥 [新!LLaVA-1.5 在 11 个基准测试上实现了 SoTA,只需对原始 LLaVA 进行简单的修改,利用所有公共数据,在单个 1-A8 节点上在 ~100 天内完成训练,并超越使用数十亿级数据的方法。 LLaVA代表了一种新颖的端到端训练大型多模态模型,结合了视觉编码器和骆马 对于通用的视…

微信小程序开发的OA会议之会议个人中心的页面搭建及模板,自定义组件的学习

目录 一.自定义组件及会议效果编写 效果显示 二.个人中心布局 编写结果 ​编辑 一.自定义组件及会议效果编写 在页面中创建一个以components命名的项目来存放组件 再在components文件夹中创建一个组件&#xff0c;名为 :tabs &#xff0c;创建操作如图所示 刚刚创建好会报…

Android中级——MVVM

MVVM MVVM是什么&#xff1f;MVVM实现前提ModelViewModelView MVVM是什么&#xff1f; Model-View-ViewMode架构&#xff0c;可看作MVP改进版&#xff0c;将此前Presenter的逻辑操作交给ViewMode中的Binder去处理 Mode&#xff1a;封装数据存储及相关操作逻辑&#xff0c;与MV…

LeetCode 799. 香槟塔【数组,模拟,简单线性DP】1855

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

Py之tiktoken:tiktoken的简介、安装、使用方法之详细攻略

Py之tiktoken&#xff1a;tiktoken的简介、安装、使用方法之详细攻略 目录 tiktoken的简介 1、性能&#xff1a;tiktoken比一个类似的开源分词器快3到6倍 tiktoken的安装 tiktoken的使用方法 1、基础用法 (1)、用于OpenAI模型的快速BPE标记器 (2)、帮助可视化BPE过程的代…

【SA8295P 源码分析 (三)】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析

【SA8295P 源码分析】97 - QNX AIS Camera 框架介绍 及 Camera 工作流程分析 一、QNX AIS Server 框架分析二、QNX Hypervisor / Android GVM 方案介绍三、Camera APP 调用流程分析四、QCarCam 状态转换过程介绍五、Camera 加串-解串 硬件链路分析六、摄像头初始化检测过程介绍…

观察者模式-对象间的联动

有个商城小程序&#xff0c;用户希望当有新品上市的时候能通知他们。这样用户就可以不要时刻盯着小程序了。在这个场景中&#xff0c;用户向小程序订阅了一个服务——发送新品短信。小程序在有新品上线时负责向订阅客户发出这个消息。 这就是发布-订阅模式&#xff0c;也称观察…

YOLOv5-调用官方权重进行检验(目标检测)

&#x1f368; 本文为[&#x1f517;365天深度学习训练营学习记录博客 &#x1f366; 参考文章&#xff1a;365天深度学习训练营-第7周&#xff1a;咖啡豆识别&#xff08;训练营内部成员可读&#xff09; &#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制](https…

运放的单电源供电设计

文章目录 运放单电源供电同向比例单电源放大电路设计反向比例单电源放大电路设计 运放单电源供电 同向比例单电源放大电路设计 不放大直流&#xff0c;对直流来说是一个电压跟随器&#xff0c;对交流来说是同向比例 反向比例单电源放大电路设计 注&#xff1a;仪表放大器不能直…

Redis内存回收机制-内存淘汰策略和过期策略

Redis是基于内存操作的非关系型数据库&#xff0c;在内存空间不足的时候&#xff0c;为了保证程序的运行和命中率&#xff0c;就会淘汰一部分数据。如何淘汰数据&#xff1f;这就是Redis的内存回收策略。 Redis中的内存回收策略主要有两个方面&#xff1a; Redis过期策略&#…

nodejs+vue云旅青城系统-旅游网站

用户可以实现首页、个人中心、订票信息管理、路线制定管理等。不仅使服务管理难度变低了&#xff0c;还提升了管理的灵活性。目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 …

【四:Spring整合Junit】

目录 相同点不同点1、导入依赖增加2、编写的位置不同。。路径一定要与实现类一致 相同点 前面都一样和Spring整合mybatis&#xff08;基于注解形式&#xff09;一样Spring整合Mybatis 不同点 1、导入依赖增加 <!-- 单元测试 --><dependency><groupId>junit&…

【MySql】8- 实践篇(六)

文章目录 1. MySql保证主备一致1.1 MySQL 主备的基本原理1.2 binlog 的三种格式对比1.3 循环复制问题 2. MySql保证高可用2.1 主备延迟2.2 主备延迟的来源2.3 可靠性优先策略2.4 可用性优先策略 3. 备库为何会延迟很久-备库并行复制能力3.1 MySQL 5.6 版本的并行复制策略3.2 Ma…

Unity之ShaderGraph如何实现马赛克效果

前言 今天我们来实现一个马赛克的效果 如下所示&#xff1a; 关键节点 Posterize&#xff1a;色调分离节点 图像的色调分离或色调分离需要将色调的连续渐变转换为色调较少的几个区域&#xff0c;并从一种色调突然改变为另一种色调。 原理 原理就是通过色调分离节点&…

华纳云:linux怎么搭建node.js开发环境

搭建Node.js开发环境在Linux系统上非常简单&#xff0c;以下是一些基本步骤&#xff0c;以帮助您开始&#xff1a; 1. 安装Node.js&#xff1a; 您可以通过包管理器来安装Node.js。不同的Linux发行版使用不同的包管理器。以下是一些常见的Linux发行版和它们的包管理器&#xff…

虚拟音频设备软件 Loopback mac中文版软件介绍

创建虚拟音频设备以从应用程序和音频输入设备获取声音&#xff0c;然后将其发送到音频处理应用程序&#xff0c;它就是—Loopback for Mac&#xff0c;Loopback mac为您提供高端工作室混音板的强大功能&#xff0c;有了它在Mac上传递音频会变得很容易。 Loopback for mac中文版…

Paper Reading:《Consistent-Teacher: 减少半监督目标检测中不一致的伪目标》

#pic_center 550x200 目录 简介工作重点方法ASA, adaptive anchor assignmentFAM-3D, 3D feature alignment moduleGMM, Gaussian Mixture Model实施细节 实验与SOTA的比较消融实验 总结 简介 题目&#xff1a;《Consistent-Teacher: Towards Reducing Inconsistent Pseudo-ta…