LeetCode 2909. 元素和最小的山形三元组 II

**### LeetCode 2909. 元素和最小的山形三元组 II

问题描述

给定一个下标从 0 开始的整数数组 nums,我们需要找到一个“山形三元组”(i, j, k)满足以下条件:

  • i < j < k
  • nums[i] < nums[j]nums[k] < nums[j]

并且返回这个三元组的元素和 nums[i] + nums[j] + nums[k]。如果不存在符合条件的三元组,返回 -1


思路分析

我们可以使用优化的双指针方法来高效解决该问题。

关键思路:

  1. 前缀和: 遍历数组时,记录每个元素之前的最小值。我们称之为“前缀最小值”。通过前缀最小值可以很快找到左边比当前元素小的元素 nums[i]

  2. 后缀最小值: 类似地,我们还需要维护一个“后缀最小值”数组,记录每个元素后面的最小值。通过后缀最小值,可以快速找到右边比当前元素小的元素 nums[k]

  3. 遍历中间元素: 在固定中间位置 j 的时候,检查其左边是否有比它小的元素 nums[i](通过前缀最小值)以及右边是否有比它小的元素 nums[k](通过后缀最小值)。如果存在这样的 ik,就计算当前的三元组和,并更新最小值。

  4. 返回结果: 在所有符合条件的三元组中,返回最小和。如果没有符合条件的三元组,返回 -1


代码实现
class Solution:def minimumSum(self, nums: List[int]) -> int:n = len(nums)# 计算后缀最小值数组suf = [0] * nsuf[-1] = nums[-1]for i in range(n-2, -1, -1):suf[i] = min(suf[i+1], nums[i])# 初始化前缀最小值和结果pre, ans = nums[0], float('inf')# 遍历数组,寻找符合条件的三元组for i in range(1, n-1):if pre < nums[i] > suf[i]:ans = min(ans, pre + nums[i] + suf[i+1])pre = min(pre, nums[i])return ans if ans < float('inf') else -1
代码解释
  1. 后缀最小值 suf 数组:

    suf = [0] * n
    suf[-1] = nums[-1]
    for i in range(n-2, -1, -1):suf[i] = min(suf[i+1], nums[i])
    
    • 该数组记录每个位置 i 右侧的最小值。suf[i] 表示从位置 i 到数组末尾之间的最小值。
    • suf[-1] 初始化为 nums[-1],然后从后向前计算其他元素的后缀最小值。
  2. 前缀最小值 pre 和结果 ans

    pre, ans = nums[0], float('inf')
    
    • pre 记录当前元素左侧的最小值,用来和当前元素 nums[i] 比较,确保 nums[i] 是一个合法的山形三元组的中间元素。
    • ans 用来记录所有符合条件的三元组中的最小和。
  3. 遍历并计算三元组和:

    for i in range(1, n-1):if pre < nums[i] > suf[i]:ans = min(ans, pre + nums[i] + suf[i+1])pre = min(pre, nums[i])
    
    • 对每个位置 i,如果 nums[i] 大于 pre(左侧最小值)且大于 suf[i](右侧最小值),则说明该位置可以作为山形三元组的中间元素 nums[j]
    • 更新最小和 ans,并且在每次遍历时更新 pre,即记录当前元素 nums[i] 作为新的左侧最小值。
  4. 返回结果:

    return ans if ans < float('inf') else -1
    
    • 如果 ans 仍然为 float('inf'),则表示没有找到符合条件的三元组,返回 -1

时间复杂度
  • 计算后缀最小值的时间复杂度是 O(n)
  • 遍历数组的时间复杂度是 O(n)

因此,总的时间复杂度是 O(n),对于 n 最大为 10^5 的情况非常高效。


示例分析

示例 1:

输入:

nums = [8, 6, 1, 5, 3]

输出:

9

解释:三元组 (2, 3, 4) 满足条件,最小和为 nums[2] + nums[3] + nums[4] = 9

示例 2:

输入:

nums = [5, 4, 8, 7, 10, 2]

输出:

13

解释:三元组 (1, 3, 5) 满足条件,最小和为 nums[1] + nums[3] + nums[5] = 13

示例 3:

输入:

nums = [6, 5, 4, 3, 4, 5]

输出:

-1

解释:没有符合条件的山形三元组。


总结

通过计算前缀和后缀最小值数组,并结合双指针技巧,我们能够高效地找到符合条件的山形三元组并计算其最小和。这样,我们的解决方案达到了 O(n) 的时间复杂度,能够处理大规模数据输入。**

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

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

相关文章

41. 缺失的第一个正数

参考题解&#xff1a;https://leetcode.cn/problems/first-missing-positive/solutions/7703/tong-pai-xu-python-dai-ma-by-liweiwei1419 难点在于时间复杂度控制在O(n)&#xff0c;空间复杂度为常数级。 哈希表时间复杂度符合&#xff0c;但是空间复杂度为O(n) 排序空间复杂…

深入核心:一步步手撕Tomcat搭建自己的Web服务器

介绍&#xff1a; servlet&#xff1a;处理 http 请求 tomcat&#xff1a;服务器 Servlet servlet 接口&#xff1a; 定义 Servlet 声明周期初始化&#xff1a;init服务&#xff1a;service销毁&#xff1a;destory 继承链&#xff1a; Tomcat Tomcat 和 servlet 原理&#x…

final-关键字

一、final修饰的类不能被继承 当final修饰一个类时&#xff0c;表明这个类不能被其他类继承。例如&#xff0c;在 Java 中&#xff0c;String类就是被final修饰的&#xff0c;这保证了String类的不可变性和安全性&#xff0c;防止其他类通过继承来改变String类的行为。 final…

51单片机 01 LED

一、点亮一个LED 在STC-ISP中单片机型号选择 STC89C52RC/LE52RC&#xff1b;如果没有找到hex文件&#xff08;在objects文件夹下&#xff09;&#xff0c;在keil中options for target-output- 勾选 create hex file。 如果要修改编程 &#xff1a;重新编译-下载/编程-单片机重…

知识库建设与知识管理实践对企业发展的助推作用探索

内容概要 在当今瞬息万变的商业环境中&#xff0c;知识库建设与知识管理实践日益成为企业发展的重要驱动力。知识库作为组织内信息和知识的集成&#xff0c;起着信息存储、整理和共享的关键作用。通过有效的知识库建设&#xff0c;企业不仅能够提升员工获取信息的便利性&#…

【Pytorch和Keras】使用transformer库进行图像分类

目录 一、环境准备二、基于Pytorch的预训练模型1、准备数据集2、加载预训练模型3、 使用pytorch进行模型构建 三、基于keras的预训练模型四、模型测试五、参考 现在大多数的模型都会上传到huggface平台进行统一的管理&#xff0c;transformer库能关联到huggface中对应的模型&am…

如何使用 DeepSeek 和 Dexscreener 构建免费的 AI 加密交易机器人?

我使用DeepSeek AI和Dexscreener API构建的一个简单的 AI 加密交易机器人实现了这一目标。在本文中&#xff0c;我将逐步指导您如何构建像我一样的机器人。 DeepSeek 最近发布了R1&#xff0c;这是一种先进的 AI 模型。您可以将其视为 ChatGPT 的免费开源版本&#xff0c;但增加…

ArkTS渲染控制

文章目录 if/else:条件渲染ArkUI通过自定义组件的build()函数和@Builder装饰器中的声明式UI描述语句构建相应的UI。在声明式描述语句中开发者除了使用系统组件外,还可以使用渲染控制语句来辅助UI的构建,这些渲染控制语句包括控制组件是否显示的条件渲染语句,基于数组数据快…

potplayer字幕

看视频学习&#xff0c;实时字幕可以快速过滤水字数阶段&#xff0c;提高效率&#xff0c;但是容易错过一些信息。下面就是解决这一问题。 工具ptoplayer 一.生成字幕 打开学习视频&#xff0c;右键点击视频画面&#xff0c;点选字幕。勾选显示字幕。点选创建有声字幕&#…

deepseek的两种本地使用方式

总结来说 ollama是命令行 GPT4ALL桌面程序。 然后ollamaAnythingLLM可以达到桌面或web的两种接入方式。 一. ollama和deepseek-r1-1.5b和AnythingLLM 本文介绍一个桌面版的deepseek的本地部署过程&#xff0c;其中ollama可以部署在远程。 1. https://www.cnblogs.com/janeysj/p…

海外问卷调查渠道查,如何影响企业的运营

我们注意到&#xff0c;随着信息资源和传播的变化&#xff0c;海外问卷调查渠道查已发生了深刻的变化。几年前&#xff0c;市场调研是业内专家们的事&#xff0c;即使是第二手资料也需要专业人士来完成&#xff1b;但如今的因特网和许许多多的信息数据库&#xff0c;使每个人都…

TensorFlow简单的线性回归任务

如何使用 TensorFlow 和 Keras 创建、训练并进行预测 1. 数据准备与预处理 2. 构建模型 3. 编译模型 4. 训练模型 5. 评估模型 6. 模型应用与预测 7. 保存与加载模型 8.完整代码 1. 数据准备与预处理 我们将使用一个简单的线性回归问题&#xff0c;其中输入特征 x 和标…

当卷积神经网络遇上AI编译器:TVM自动调优深度解析

从铜线到指令&#xff1a;硬件如何"消化"卷积 在深度学习的世界里&#xff0c;卷积层就像人体中的毛细血管——数量庞大且至关重要。但鲜有人知&#xff0c;一个简单的3x3卷积在CPU上的执行路径&#xff0c;堪比北京地铁线路图般复杂。 卷积的数学本质 对于输入张…

MySQL(高级特性篇) 13 章——事务基础知识

一、数据库事务概述 事务是数据库区别于文件系统的重要特性之一 &#xff08;1&#xff09;存储引擎支持情况 SHOW ENGINES命令来查看当前MySQL支持的存储引擎都有哪些&#xff0c;以及这些存储引擎是否支持事务能看出在MySQL中&#xff0c;只有InnoDB是支持事务的 &#x…

影视文件大数据高速分发方案

在当今的数字时代&#xff0c;影视行业的内容创作和传播方式经历了翻天覆地的变化。随着4K、8K高清视频的普及&#xff0c;以及虚拟现实(VR)和增强现实(AR)技术的发展&#xff0c;影视文件的数据量正以前所未有的速度增长。这就要求行业内的参与者必须拥有高效的大数据传输解决…

C语言教程——文件处理(2)

目录 前言 一、顺序读写函数&#xff08;续&#xff09; 1.1fprintf 1.2fscanf 1.3fwrite 1.4fread 二、流和标准流 2.1流 2.2标准流 2.3示例 三、sscanf和sprintf 3.1sprintf 3.2sscanf 四、文件的随机读写 4.1fseek 4.2ftell 4.3rewind 五、文件读取结束的…

建表注意事项(2):表约束,主键自增,序列[oracle]

没有明确写明数据库时,默认基于oracle 约束的分类 用于确保数据的完整性和一致性。约束可以分为 表级约束 和 列级约束&#xff0c;区别在于定义的位置和作用范围 复合主键约束: 主键约束中有2个或以上的字段 复合主键的列顺序会影响索引的使用&#xff0c;需谨慎设计 添加…

线性回归的损失和优化02

线性回归的损失和优化 学习目标 知道线性回归中损失函数知道使用正规方程对损失函数优化的过程知道使用梯度下降法对损失函数优化的过程 假设刚才的房子例子&#xff0c;真实的数据之间存在这样的关系&#xff1a; 真实关系&#xff1a; 真实房子价格 0.02中心区域的距离 0.…

年化18%-39.3%的策略集 | backtrader通过xtquant连接qmt实战

原创内容第785篇&#xff0c;专注量化投资、个人成长与财富自由。 大年初五&#xff0c;年很快就过完了。 其实就是本身也只是休假一周&#xff0c;但是我们赋予了它太多意义。 周五咱们发布发aitrader v4.1&#xff0c;带了backtraderctp期货的实盘接口&#xff1a; aitra…

【数据结构】_链表经典算法OJ(力扣/牛客第二弹)

目录 1. 题目1&#xff1a;返回倒数第k个节点 1.1 题目链接及描述 1.2 解题思路 1.3 程序 2. 题目2&#xff1a;链表的回文结构 2.1 题目链接及描述 2.2 解题思路 2.3 程序 1. 题目1&#xff1a;返回倒数第k个节点 1.1 题目链接及描述 题目链接&#xff1a; 面试题 …