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;
    }
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 进程信号:内核中信号结构、阻塞信号、捕捉信号

目录 一、阻塞信号 1、信号的状态 2、内核中的信号 信号集&#xff08;Signal Set&#xff09; task_struct 结构体 信号处理函数&#xff08;Handler&#xff09; 信号传递与调度 3、“signal_struct结构体”与“信号集sigset_t” 4、信号集操作函数 5、信号屏蔽字si…

【Hadoop大数据技术】——Hive数据仓库(学习笔记)

&#x1f4d6; 前言&#xff1a; Hive起源于Facebook&#xff0c;Facebook公司有着大量的日志数据&#xff0c;而Hadoop是实现了MapReduce模式开源的分布式并行计算的框架&#xff0c;可轻松处理大规模数据。然而MapReduce程序对熟悉Java语言的工程师来说容易开发&#xff0c;但…

还在问要不要学Python?看完这篇你就知道了

前不久教育界的一个消息&#xff0c;引发了广泛的关注。 今年9月开学后&#xff0c;浙江三到九年级信息技术课将替换新教材&#xff0c;八年级将新增Python课程内容。新高一信息技术编程语言由VB替换为Python&#xff0c;大数据、人工智能、程序设计与算法按照教材规划五六年级…

抽象类和接口(java初识)

1.抽象类 1.1抽象类的概念 在面向对象中&#xff0c;所有对象都是通过类来描绘的&#xff0c;但是反过来&#xff0c;并不是所有的类都是用来描绘对象的&#xff0c;如果一个类中没有包含足够的信息描绘一个具体的对象&#xff0c;这样的类就是抽象类。 例子&#xff1a; 说明…

【C语言终章】预处理详解(上)

【C语言终章】预处理详解&#xff08;上&#xff09; 当你看到了这里时&#xff0c;首先要恭喜你&#xff01;因为这里就是C语言的最后一站了&#xff0c;你的编程大能旅途也将从此站开始&#xff0c;为坚持不懈的你鼓个掌吧&#xff01; &#x1f955;个人主页&#xff1a;开敲…

代码随想录算法训练营三刷 day38 | 动态规划之 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

三刷day38 509. 斐波那契数1 确定dp数组以及下标的含义2 确定递推公式3 dp数组如何初始化4 确定遍历顺序5 举例推导dp数组 70. 爬楼梯1 确定dp数组以及下标的含义2 确定递推公式3 dp数组如何初始化4 确定遍历顺序5 举例推导dp数组 746. 使用最小花费爬楼梯1 确定dp数组以及下标…

经验分享:开源知识库才是企业低成本搭建的最佳选择!

身为企业所有者的你&#xff0c;是否为建设企业的知识库而头疼&#xff1f;想要一个功能全面而又简单易用的知识库&#xff0c;但又担心成本过高&#xff1f;那我今天要分享的内容&#xff0c;可能会给你带来一些启示。那便是&#xff1a;开源知识库便是你企业低成本搭建的最佳…

Stable Diffusion 模型下载:epiCPhotoGasm(真实、照片)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八 下载地址 模型介绍 该模型对照片是什么有很高的了解&#xff0c;所以…

Arcgis获取乡镇矢量

现有全中国乡镇矢量边界&#xff08;2023年&#xff09;&#xff0c;如何获取其中的自己所需的子区域&#xff08;一个小镇&#xff09;呢&#xff1f; 可以先去查一下自己的镇代码&#xff0c;我查的是东马圈镇代码 打开分析工具-提取分析-筛选 刚刚记下了FID 验证一下&am…

武汉星起航:引领跨境电商新纪元,助力卖家实现全球业务飞跃

在全球化的时代背景下&#xff0c;越来越多的中国卖家正选择跨境电商作为他们拓展国际市场的重要途径。然而&#xff0c;对于许多新手卖家而言&#xff0c;如何进入海外市场、如何运营店铺、如何推广产品&#xff0c;都是一道道难以逾越的难题。在这个关键时刻&#xff0c;武汉…

词令用户常说的:词令关键词口令直达与词令关键词直达口令有什么区别?

词令是一种通过输入特定关键词令&#xff0c;直达该词令关联的网站、页面、程序、应用、功能、服务或目标的工具。词令可以帮助用户更快速、更便捷的直达目标的提效软件。而词令用户常说的&#xff1a;词令关键词口令直达与词令关键词直达口令有什么区别&#xff1f; 词令关键词…

【多模态对比学习】我遇到的坑

对比学习踩坑记录 本文是对过去几个月来利用对比学习的思想来优化多模态学习任务的思路的总结&#xff0c;主要包含以下几个方面&#xff1a;为什么要用对比学习、跨模态中对比学习怎么用、对比的过程中负样本是不是越多越好、要不要推远所有的负样本、样本之间的语义碰撞如何缓…

低噪声、轨至轨运算放大器芯片—— D721、D722、D724,适合用于音频领域

应用领域 D721、D722、D724是我们推荐的三款低噪声、轨至轨运算放大器芯片&#xff0c;其中D721为单运放&#xff0c;D722为双运放&#xff0c;D724为四运放。适合用于音频领域、传感器等的信号放大处理&#xff0c;比如K歌宝、音响、测距、滤波器、AD转换器前级信号处理等等。…

【Go】二、Go的基本数据类型

文章目录 0、进制1、变量的声明2、数据类型3、整型4、浮点型5、字符类型6、布尔类型7、字符串类型8、基本数据类型的默认值9、类型转换10、基本类型转String11、String转其他类型 0、进制 N进制&#xff0c;逢N进一 1、变量的声明 //声明 赋值 var age int 18//声明、赋值、…

基于单片机20v数字电压表仿真系统设计

**单片机设计介绍&#xff0c;基于单片机20v数字电压表仿真系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机20V数字电压表仿真系统设计是一个结合了硬件与软件设计的综合性项目。以下是对该设计概要的详细描述…

使用 CSS 实现多立方体悬停颜色效果实现

使用 CSS 实现多立方体悬停效果实现 效果展示 CSS 知识点 filter 属性的 hue-rotate 值运用使用 CSS 实现立方体 场景布局分析 从效果图可以看出&#xff0c;要实现 3*3 的立方体集合&#xff0c;我们需要考虑一下怎么安排小立方体的布局。我这里的做法是使用span实现单个小…

账号微服务短信验证码发送工具单元测试

账号微服务短信验证码发送工具单元测试 注意sms的 app-code #----------sms短信配置-------------- sms:app-code: dd7829bedfaf4373875aa91abba82523template-id: JM1000372package net.xdclass.config;import org.springframework.context.annotation.Bean; import org.spri…

klmanga 章节链接获取

两年前还是可以直接爬的&#xff0c;现在章节不显示了 直接爬取下来的源码章节显示loading&#xff0c;在源码中可以看到是通过js加载出来的&#xff0c;搜索loadChapterDate dataFile atob(FR)&#xff0c;这是将FR的值用base64解码赋予dataFile 根据这段var paramsnew …

原生JS/JQuery封装请求工具类

原生JS的用途 原生 JavaScript 是一种用于开发网络应用程序的编程语言。它可以用于网页开发、服务器端开发和移动应用开发等多个方面。以下是原生 JavaScript 的一些主要用途&#xff1a; 网页开发&#xff1a;原生 JavaScript 可用于处理 DOM&#xff08;文档对象模型&#x…

指针知识大礼包,让你的编程之路更顺畅(四)

1. 回调函数是什么&#xff1f; 2. qsort使⽤举例 3. qsort函数的模拟实现 4. sizeof和strlen的对⽐ 5. 数组和指针笔试题解析 6. 指针运算笔试题解析 正文开始&#xff1a; 1. 回调函数是什么&#xff1f; 回调函数就是⼀个通过 函数指针 调⽤的函数。 如果你把函数的…