LeetCode.2908. 元素和最小的山形三元组 I

题目

2908. 元素和最小的山形三元组 I

分析

首先,看到这道题,第一反应就是暴力方法,三层for循环,枚举每一种情况,代码如下

class Solution {public int minimumSum(int[] nums) {int min = Integer.MAX_VALUE;for(int i = 0;i < nums.length - 2;i ++) {for(int j = i+1;j < nums.length - 1;j ++) {for(int k = j+1;k < nums.length;k ++) {if(nums[i] < nums[j] && nums[k] < nums[j])min = Math.min(min,nums[i]+nums[j]+nums[k]);}}}return min ==  Integer.MAX_VALUE?-1:min;}
}

这虽然能通过LeetCode,但是太暴力了。我们还是要想一些其他方法来解决。我们可以利用前后缀的思想来解决,具体思路如下:

枚举nums[i],我们需要知道i左边的最小元素和i右边的最小元素,得到每一个nums[i]的左右两个元素和当前nums[i]相加,最小的值就是我们要求的值。

我们定义 suf[i] 表示 i 右边最小的值(包含i位置)。我们怎么求的这个值呢????我们从后向前遍历,suf[i] = Math.min(suf[i+1] , nums[i])

前缀最小值pre采取同样的方法,可以和答案一起计算,所以,只需要定义成一个变量即可。

三个数之和就是:pre + nums[i] + suf[i+1]。题目也就是让我们求这个的最小值。

代码

class Solution {public int minimumSum(int[] nums) {int n = nums.length;int[] suf = new int[n]; // 后缀最小值suf[n - 1] = nums[n-1];for(int i = n - 2;i > 1;i --) {suf[i] = Math.min(suf[i+1],nums[i]);}int ans = Integer.MAX_VALUE;int pre = nums[0]; // 前缀最小值for(int i = 1;i < n - 1;i ++) {if(pre < nums[i] && nums[i] > suf[i+1]) {ans = Math.min(ans,pre+nums[i]+suf[i+1]);}pre = Math.min(pre,nums[i]);}return ans == Integer.MAX_VALUE ? -1 : ans;}
}

在这里插入图片描述

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

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

相关文章

SHELL(03)

SHELL(02) 中断控制 [ break ] 中断 跳出当前所在的循环体 , 执行循环体后的语句块可以结束整个循环 [ continue ] 继续 跳过循环体内余下的语句 , 重新判断条件以决定是否需要执行下一次循环结束当前循环 , 进入下次循环 [ exit ] 退出 退出脚本结束循环以及整个脚本 …

基于Springboot的学生选课系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的学生选课系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

线程池详解、核心参数、拒绝策略

什么是线程池 线程池是一种池化技术&#xff0c;它预先创建一组线程&#xff0c;用于执行异步任务。当有新任务到来时&#xff0c;线程池可以立即分配一个线程来处理&#xff0c;而不需要临时创建。这样可以减少因为频繁创建和销毁线程而导致的开销。 线程池的应用场景 高并…

2024年腾讯云4核8G12M轻量应用服务器测评_CPU内存带宽系统盘

腾讯云4核8G服务器价格&#xff1a;轻量4核8G12M优惠价格646元15个月、CVM S5服务器4核8G配置1437元买1年送3个月。腾讯云4核8G服务器支持多少人同时在线&#xff1f;支持30个并发数&#xff0c;可容纳日均1万IP人数访问。腾讯云百科txybk.com整理4核8G服务器支持多少人同时在线…

laravel(源码笔记) request-response 执行过程

request capture SymfonyRequest::createFromGlobals() createRequestFromFactory如果是form提交的方式&#xff0c;则创建Symfony Package里提供的 ParameterBag对象包&#xff0c;处理请求。 createFromBase duplicate 克隆请求&#xff0c;并重设一些属性 response run…

什么是技术分析和EA技术?澳福一个提醒丰厚收益

技术分析是指根据炒外汇市场汇率走势的过去表现&#xff0c;借助技术分析工具预测汇率的未来趋势并确定入市、出市策略的预测分析方法。 它是以预测市场价格变化的未来趋势为目的&#xff0c;以市场行为(外汇市场的价格和交易量)的图形、图表、形态、指标为手段&#xff0c;使用…

docker通过已有镜像打包执行

1、查看已有镜像 docker images 2、制作dockerfile FROM python LABEL maintainer"JETZ" add . / WORKDIR /3、新建镜像 docker build -t python3.7.13 .4、打包导出镜像 docker save python3.7.13 -o /opt/python3.7.13.tar5、重新加载镜像 cd /opt docker l…

花钱的艺术:消费和投资如何分配

消费是钱花出去就回不来了。 消费分为可选消费和必需消费。 必需消费是必须花的钱&#xff0c;用一句老话&#xff0c;财米油盐酱醋茶&#xff0c;维持生活必需的支出。 可选消费&#xff0c;用来提升生活水平的支出&#xff0c;可花可不花&#xff0c;比如苹果手机&#xf…

电商系列之取消订单

> 插&#xff1a;AI时代&#xff0c;程序员或多或少要了解些人工智能&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家…

SOA-面向服务架构

SOA-面向服务架构 1.概述2.SOA的设计原则包括&#xff1a;3. SOA实现方法1.Web Service2. 服务注册表3. 企业服务总线 细讲 超赞笔记 1.概述 SOA &#xff08;Service-Oriented Architecture&#xff0c;SOA&#xff09;&#xff0c;从应用和原理的角度&#xff0c;目前有2种…

GET 与 POST(计算机网络)

GET &#xff1a;从服务器获取指定的资源。 POST &#xff1a;根据请求负荷&#xff08;报文body&#xff09;对指定的资源做出处理。 GET 和 POST 方法都是安全和幂等的吗&#xff1f; 在 HTTP 协议里安全和幂等的概念&#xff1a; 「安全」&#xff1a;请求方法不会「破坏」…

Matlab之提高交叉定位点的定位精度

通过测向交叉定位的方法&#xff0c;按理只需2根测向线即可得出定位点的位置。但由于误差的存在&#xff0c;求出的定位点位置存在一定的偏差。为了得到更加精确的定位点位置&#xff0c;需要对定位点进行冗余测量&#xff0c;从而得到多个定位点&#xff0c;然后通过定位点估计…

redis分布式锁-----基于Redis的SETNX命令的简单分布式锁实现

Redis的SETNX命令的简单分布式锁实现的Java示例 首先&#xff0c;确保你已经引入了Jedis这个Java Redis客户端库。你可以通过Maven或Gradle来添加依赖。 1、Maven依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifact…

Docker一键部署MySQL 8

Docker一键部署MySQL 8 脚本下载 下载路径&#xff1a;mysql8.0.20.sh 使用FTP 工具或rz 命令将脚本上传到服务器 授权 [rootxxx~]# chmod x mysql8.0.20.sh执行脚本 [rootiZm5e4qautzfi19sq8s7aeZ ~]# ./mysql8.0.20.sh 初始化MySQL部署... 拉取MySQL 8.0.20 镜像... 8.…

(一)认识微服务

1. 什么是微服务 微服务是分布式架构的一种。 1.1 微服务技术 &#xff01; Spring Cloud 分布式架构就是要把服务进行拆分&#xff0c;拆分的过程会产生一系列问题需要解决&#xff0c;而Spirng Cloud 只是解决了服务拆分的过程中的服务治理问题&#xff0c;所以一个完整的…

GRE和MGRE综合实验

实验拓扑图 实验思路 根据图中所属网段&#xff0c;配置ip地址和网关R1,R2,R3,R4配置缺省路由&#xff0c;可以是公网互通使用ppp验证&#xff0c;R1与R5为PAP验证&#xff0c;R5:aaa地址池&#xff0c;创建用户名以及密码&#xff0c;同时进行pap服务认证&#xff0c;同时在…

playwright 对象是 Playwright 框架中的核心对象

Playwright对象是Playwright框架中的一个重要对象&#xff0c;它充当了管理和控制浏览器实例的中介&#xff0c;并提供了访问不同浏览器引擎功能的接口。Playwright库为Web浏览器自动化提供了一组强大的API&#xff0c;可以轻松地操作和控制Chromium、Firefox和WebKit浏览器。p…

(root用户与非root用户)linux下安装最新版tmux

下载依赖包 tmux需要两个依赖包&#xff0c;libevent和ncurses&#xff0c;在tmux的github wiki官网可以找到对应的源码下载地址: libeventncursestmux 下载三个包的tar.gz文件 root用户与非root用户 下列安装指令中&#xff0c;如果是root用户想安装到系统级目录下&#x…

使用nvm管理nodejs版本

文章目录 1、下载NVM2、选择NVM安装3 、查询版本号&常用命令4、nvm命令安装指定版本node4.1 安装指定node4.2 查看是否安装成功4.3 切换node版本到你想要的版本4.4 再次查看nvm版本列表4.5 nvm其他常用命令 这个是每个全能前端经常会用到的&#xff0c;之前用过现在重装了&…

如何Hook [NSString stringWithFormat] 代码hook stringWithFormat中替换NSString字符串

怎么hook stringWithFormat方法 id stringWithFormat(id self, SEL op,id obj1, ...); id stringWithFormat(id self, SEL op,id obj1, ...){va_list args;va_start(args, obj1);//等价实现方法NSString *result [[NSMutableString alloc] initWithFormat:obj1 arguments:arg…