LeetCode算法心得——元素和最小的山形三元组 II(预处理和简单动规)

本文主要是介绍LeetCode算法心得——元素和最小的山形三元组 II(预处理和简单动规),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

大家好,我是晴天学长,枚举+简单的动态规划思想,和前段时间的周赛题的写法可以说一模一样,像这种类似3元的题,要控制时间复杂度的话,只能枚举一个变量,所以要前缀和或者动规等待。需要的小伙伴可以关注支持一下哦!后续会继续更新的。


1) .元素和最小的山形三元组 II

在这里插入图片描述
元素和最小的山形三元组 II
给你一个下标从 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 <= 105
1 <= nums[i] <= 108


2) .算法思路

方法一:(枚举j)
1.预处理k(右边的最大值)
2.遍历j,维护前面的最小值。
方法二.(简单动规)
1.遍历k
2.维护前面i,j,为前面的符合条件的两个最小值。


3) .算法步骤

1.初始化premin为数组的第一个元素nums[0],作为当前位置的左侧最小值。
2.初始化变量n为数组的长度。
3.创建一个长度为n的整数数组rightmin,用于存储每个位置右侧的最小值。
4.初始化变量rightMin为数组的最后一个元素nums[n - 1],作为最后一个位置的右侧最小值。
5.从数组的最后一个位置开始,倒序遍历数组,更新rightMin为当前位置及其右侧的最小值,并将其存储到rightmin数组中。
6.初始化变量ans为整型最大值,用于记录满足条件的最小和。
7.从数组的第二个位置开始,遍历到倒数第二个位置,依次判断当前位置的值是否满足条件。
8.如果当前位置的值大于左侧的最小值premin,并且大于右侧的最小值rightmin[i+1],则满足条件。
9.更新ans为当前位置的值与左右最小值的和的最小值。
10更新premin为当前位置的值与左侧最小值premin的较小值。
11.最后,如果ans仍然等于整型最大值,则说明没有满足条件的最小和,返回-1。
12.否则,将ans转换为整数并返回作为结果。


4).代码示例

class Solution {public int minimumSum(int[] nums) {int premin = nums[0];int n = nums.length;int[] rightmin = new int[n];int rightMin = nums[n - 1];//预处理for (int i = n - 1; i >= 0; i--) {rightMin = Math.min(rightMin, nums[i]);rightmin[i] = rightMin;}//遍历jlong ans = Integer.MAX_VALUE;for (int i = 1; i < n - 1; i++) {if (premin < nums[i] && rightmin[i+1] < nums[i]){ans = Math.min(ans, premin+nums[i]+rightmin[i+1]);}premin = Math.min(premin, nums[i]);}if (ans == Integer.MAX_VALUE){return -1;}return (int) ans;}
}

5).总结

  • 注意数组越界。
  • 变量的正确赋值。

试题链接:

这篇关于LeetCode算法心得——元素和最小的山形三元组 II(预处理和简单动规)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

python连接sqlite3简单用法完整例子

《python连接sqlite3简单用法完整例子》SQLite3是一个内置的Python模块,可以通过Python的标准库轻松地使用,无需进行额外安装和配置,:本文主要介绍python连接sqli... 目录1. 连接到数据库2. 创建游标对象3. 创建表4. 插入数据5. 查询数据6. 更新数据7. 删除

Jenkins的安装与简单配置过程

《Jenkins的安装与简单配置过程》本文简述Jenkins在CentOS7.3上安装流程,包括Java环境配置、RPM包安装、修改JENKINS_HOME路径及权限、启动服务、插件安装与系统管理设置... 目录www.chinasem.cnJenkins安装访问并配置JenkinsJenkins配置邮件通知

把Python列表中的元素移动到开头的三种方法

《把Python列表中的元素移动到开头的三种方法》在Python编程中,我们经常需要对列表(list)进行操作,有时,我们希望将列表中的某个元素移动到最前面,使其成为第一项,本文给大家介绍了把Pyth... 目录一、查找删除插入法1. 找到元素的索引2. 移除元素3. 插入到列表开头二、使用列表切片(Lis

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编

Java中使用 @Builder 注解的简单示例

《Java中使用@Builder注解的简单示例》@Builder简化构建但存在复杂性,需配合其他注解,导致可变性、抽象类型处理难题,链式编程非最佳实践,适合长期对象,避免与@Data混用,改用@G... 目录一、案例二、不足之处大多数同学使用 @Builder 无非就是为了链式编程,然而 @Builder

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

C# 比较两个list 之间元素差异的常用方法

《C#比较两个list之间元素差异的常用方法》:本文主要介绍C#比较两个list之间元素差异,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1. 使用Except方法2. 使用Except的逆操作3. 使用LINQ的Join,GroupJoin

Java中的雪花算法Snowflake解析与实践技巧

《Java中的雪花算法Snowflake解析与实践技巧》本文解析了雪花算法的原理、Java实现及生产实践,涵盖ID结构、位运算技巧、时钟回拨处理、WorkerId分配等关键点,并探讨了百度UidGen... 目录一、雪花算法核心原理1.1 算法起源1.2 ID结构详解1.3 核心特性二、Java实现解析2.