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

相关文章

CSS实现元素撑满剩余空间的五种方法

《CSS实现元素撑满剩余空间的五种方法》在日常开发中,我们经常需要让某个元素占据容器的剩余空间,本文将介绍5种不同的方法来实现这个需求,并分析各种方法的优缺点,感兴趣的朋友一起看看吧... css实现元素撑满剩余空间的5种方法 在日常开发中,我们经常需要让某个元素占据容器的剩余空间。这是一个常见的布局需求

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经