LeetCode 2908.元素和最小的山形三元组 I:贪心(两次遍历)——双O(n)复杂度

【LetMeFly】2908.元素和最小的山形三元组 I:贪心(两次遍历)——双O(n)复杂度

力扣题目链接:https://leetcode.cn/problems/minimum-sum-of-mountain-triplets-i/

给你一个下标从 0 开始的整数数组 nums

如果下标三元组 (i, j, k) 满足下述全部条件,则认为它是一个 山形三元组

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

请你找出 nums元素和最小 的山形三元组,并返回其 元素和 。如果不存在满足条件的三元组,返回 -1

 

示例 1:

输入:nums = [8,6,1,5,3]
输出:9
解释:三元组 (2, 3, 4) 是一个元素和等于 9 的山形三元组,因为: 
- 2 < 3 < 4
- nums[2] < nums[3] 且 nums[4] < nums[3]
这个三元组的元素和等于 nums[2] + nums[3] + nums[4] = 9 。可以证明不存在元素和小于 9 的山形三元组。

示例 2:

输入:nums = [5,4,8,7,10,2]
输出:13
解释:三元组 (1, 3, 5) 是一个元素和等于 13 的山形三元组,因为: 
- 1 < 3 < 5 
- nums[1] < nums[3] 且 nums[5] < nums[3]
这个三元组的元素和等于 nums[1] + nums[3] + nums[5] = 13 。可以证明不存在元素和小于 13 的山形三元组。

示例 3:

输入:nums = [6,5,4,3,4,5]
输出:-1
解释:可以证明 nums 中不存在山形三元组。

 

提示:

  • 3 <= nums.length <= 50
  • 1 <= nums[i] <= 50

解题方法:两次遍历

我们可以枚举中间j的位置。对于nums[j],最优解是加上左边所有数中最小的那个 再加上 右边所有数中最小的那个。(如果两边最小都小于nums[j]的话)

因此我们可以开辟一个leftMin数组,其中leftMin[i]nums[0]nums[i]中所有值的最小值。这个数组只需要遍历一遍nums即可得到。

接着从右往左遍历j的位置,并使用一个变量rightMin记录右边的最小值,遍历完成后即可得知所有合法山形三元组中最小的那个了。

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( n ) O(n) O(n)

AC代码

C++
class Solution {
public:int minimumSum(vector<int>& nums) {vector<int> leftMin(nums.size());leftMin[0] = nums[0];for (int i = 1; i < nums.size(); i++) {leftMin[i] = min(nums[i], leftMin[i - 1]);}int rightMin = nums.back();int ans = 1e7;for (int i = nums.size() - 2; i > 0; i--) {if (nums[i] > leftMin[i - 1] && nums[i] > rightMin) {ans = min(ans, nums[i] + leftMin[i - 1] + rightMin);}rightMin = min(rightMin, nums[i]);}return ans == 1e7 ? -1 : ans;}
};
Python
# from typing import Listclass Solution:def minimumSum(self, nums: List[int]) -> int:leftMin = [0] * len(nums)leftMin[0] = nums[0]for i in range(1, len(nums)):leftMin[i] = min(leftMin[i - 1], nums[i])rightMin = nums[-1]ans = 1_000_000for i in range(len(nums) - 2, 0, -1):if nums[i] > leftMin[i - 1] and nums[i] > rightMin:ans = min(ans, nums[i] + leftMin[i - 1] + rightMin)rightMin = min(rightMin, nums[i])return ans if ans < 1_000_000 else -1

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/137151595

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

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

相关文章

查找某数据在单链表中出现的次数

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct LinkNode {ElemType data;LinkNode* next; }LinkNode, * LinkList; //尾插法建立单链表 void creatLinkList(LinkList& L) {L (LinkNode*)mallo…

JAVA反射基础篇

简介 Java反射是指在运行时动态地获取类的信息&#xff0c;并可以通过该信息来操作类或对象。通过反射&#xff0c;我们可以在运行时获取类的字段、方法、构造函数等信息&#xff0c;并能够动态地创建对象、调用方法、访问和修改字段的值。 一丶概念 反射是Java语言的一种机…

2024.2.5力扣每日一题——跳跃游戏6

2024.2.5 题目来源我的题解方法一 深度搜索实现方法二 动态规划双端队列 题目来源 力扣每日一题&#xff1b;题序&#xff1a;1696 我的题解 方法一 深度搜索实现 使用深度搜索&#xff0c;每次选择一个在范围内的跳跃点&#xff0c;但是时间通不过。 时间复杂度&#xff1a…

Kafka配置与部署CentOS7[]

静态IP设置 # 修改网卡配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33# 修改文件内容 TYPEEthernet PROXY_METHODnone BROWSER_ONLYno BOOTPROTOstatic IPADDR192.168.18.128 NETMASK255.255.255.0 GATEWAY192.168.18.2 DEFROUTEyes IPV4_FAILURE_FATALno IPV6INIT…

设计模式之解释器模式的魅力:让代码读懂你的语言

目录 一、什么是解释器模式 二、解释器模式的应用场景 三、解释器模式的优缺点 3.1. 优点 3.2. 缺点 四、解释器模式示例 4.1. 问题描述 4.2. 问题分析 4.3. 代码实现 4.4. 优化方向 五、总结 一、什么是解释器模式 解释器模式&#xff08;Interpreter pattern&…

kubernetes(K8S)学习(七):K8S之系统核心组件

K8S之系统核心组件 K8s系统核心组件1.1 Master和Node1.2 kubeadm1.3 先把核心组件总体过一遍1.4 Kubernetes源码查看方式1.5 kubectl1.6 API Server1.7 集群安全机制之API Server1.8 Scheduler1.9 kubelet1.10 kube-proxy K8s系统核心组件 1.1 Master和Node 官网 &#xff1a;…

360奇酷刷机 360刷机助手 QGDP360手机QGDP刷机

360奇酷刷机 360刷机助手 QGDP破解版360手机QGDP刷机 360手机刷机资源下载链接&#xff1a;360rom.github.io 参考&#xff1a;360手机-360刷机360刷机包twrp、root 360奇酷刷机&#xff1a;360高通驱动安装 360手机刷机驱动&#xff1b;手机内置&#xff0c;可通过USB文件传输…

搜索与图论——染色法判定二分图

一个图是二分图当且仅当这个图中不含奇数环 由于图中没有奇数环&#xff0c;所以染色过程中一定没有矛盾 所以一个二分图一定可以成功被二染色&#xff0c;反之在二染色的过程中出现矛盾的图中一定有奇数环&#xff0c;也就一定不是二分图 #include<iostream> #includ…

【c++初阶】类与对象(中)

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ &#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1f33f;&#x1…

2024.3.30力扣刷题记录-二叉树学习记录2(未完)

一、学习视频 如何灵活运用递归&#xff1f;【基础算法精讲 10】_哔哩哔哩_bilibili 二、跟练代码 1. 100. 相同的树 递归 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # …

Transformer论文阅读

Transformer论文阅读 摘要结论1 Introduction &#xff08;导言&#xff09;2 Background3 Model Architecture3.1 Encoder and Decoder StacksEncoderLayer NormDecoder 3.2 Attention3.2.1 Scaled Dot-Product Attention3.2.2 Scaled Dot-Product Attention3.2.3 Application…

4月1日起,未备案App小程序将下架

关注卢松松&#xff0c;会经常给你分享一些我的经验和观点。 最后2天了、最后2天了。 从2024年4月1日起&#xff0c;工信部要求所有的APP、小程序都要备案&#xff0c;否则下架、关停、限制更新。这是去年8月份出的新规&#xff0c;没想到十个月这么快就过去了。 现在广东省…

【源码】关于支付宝和微信小程序的芝麻免押租赁平台建设

一、项目背景 随着科技的快速发展和互联网的普及&#xff0c;人们的生活方式发生了翻天覆地的变化。特别是在支付领域&#xff0c;传统的现金支付方式逐渐被电子支付所取代。支付宝和微信作为中国两大移动支付巨头&#xff0c;凭借其便捷、高效的特点&#xff0c;深受用户的喜…

深入解析大语言模型显存占用:训练与推理

深入解析大语言模型显存占用&#xff1a;训练与推理 文章脉络 估算模型保存大小 估算模型在训练时占用显存的大小 全量参数训练 PEFT训练 估算模型在推理时占用显存的大小 总结 对于NLP领域的从业者和研究人员来说&#xff0c;有没有遇到过这样一个场景&#xff0c;你的…

java 溯本求源之基础(九)之 javap

简介 Java 类文件反汇编工具&#xff08;javap&#xff09;是一个命令行工具&#xff0c;用于反汇编一个或多个 Java 类文件。反汇编的输出内容取决于使用的选项。当不使用任何选项时&#xff0c;javap 命令将打印传递给它的类的包、受保护的和公共字段以及方法。javap 命令将其…

某东推荐的十大3C热榜第一名!2024随身wifi靠谱品牌推荐!2024随身wifi怎么选?

一、鼠标金榜&#xff1a;戴尔 商务办公有线鼠标 售价:19.9&#xffe5; 50万人好评 二、平板电脑金榜&#xff1a;Apple iPod 10.2英寸 售价:2939&#xffe5; 200万人好评 三、随身WiFi金榜&#xff1a;格行随身WiFi 售价:69&#xffe5; 15万人好评 四、游戏本金榜&#xff…

C++多线程:unique_lock源码分析与使用详解(六)

1、unique_lock介绍 unique_lock取代lock_guard&#xff0c;unique_lock更像lock_guard的升级版&#xff0c;也是mutex的管家&#xff01; unique_lock是个类模板&#xff0c;工作中一般使用lock_guard&#xff08;推荐使用&#xff09; lock_guard取代了mutex的lock()和unloc…

Gromacs模拟一:配体-双链蛋白质复合物体系准备

1、蛋白质的准备&#xff1a; 在RCSB网站下载想要的蛋白晶体&#xff08;教程里是3htb&#xff09;&#xff0c;用notepad等编辑器或是分子可视化软件除去里面的非蛋白分子或离子。 这里采用的是一个经过分子对接后的蛋白质pdb和配体小分子的pdb。 教程里提到的配体是2-丙基…

【Java多线程】5——Lock底层原理

5 Lock底层原理 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记仓库&#x1f449;https://github.com/A-BigTree/tree-learning-notes 个人主页&#x1f449;https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&…

新能源汽车充电桩常见类型及充电桩站场的智能监管方案

随着新能源汽车市场的迅猛发展&#xff0c;充电桩作为支持其运行的基础设施&#xff0c;也呈现出多样化的类型。这些充电桩不仅在外形和功能上存在差异&#xff0c;更在充电速度、充电方式以及使用场景等方面展现出独特的优势。 一、充电桩类型及区别 1、慢充桩&#xff08;交…