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

news2024/11/24 13:54:02

大家好,我是晴天学长,枚举+简单的动态规划思想,和前段时间的周赛题的写法可以说一模一样,像这种类似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;
            }
            //遍历j
            long 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).总结

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

试题链接:

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

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

相关文章

【Java笔试强训】Day3(OR59 字符串中找出连续最长的数字串、JZ39 数组中出现次数超过一半的数字)

OR59 字符串中找出连续最长的数字串 链接&#xff1a;OR59 字符串中找出连续最长的数字串 题目&#xff1a; 读入一个字符串str&#xff0c;输出字符串str中的连续最长的数字串 题目分析&#xff1a; 代码实现&#xff1a; package Day3;import java.util.Scanner;public…

k8s 使用ingress-nginx访问集群内部应用

k8s搭建和部署应用完成后&#xff0c;可以通过NodePort&#xff0c;Loadbalancer&#xff0c;Ingress方式将应用端口暴露到集群外部&#xff0c;提供外部访问。 缺点&#xff1a; NodePort占用端口&#xff0c;大量暴露端口非常不安全&#xff0c;并且有端口数量限制【不推荐】…

纺织ERP系统哪家的比较好?适用的纺织ERP软件有哪些

服装纺织是比较常见的行业&#xff0c;也是和我们生活关联比较密切的领域。不同的原材料有差异化的采购流程和生产工序&#xff0c;如何实时掌握库存数据和车间产能负荷&#xff0c;合理制定生产排期&#xff0c;关系到企业的生产效率和经营成本。 纺织ERP系统是针对性开发的智…

2023年中国汽车铸造模具竞争现状及行业市场规模前景分析[图]

铸造是将熔融金属填充入铸型内&#xff0c;经冷却凝固而获得所需形状和性能的零部件或毛坯的制作过程&#xff0c;铸造工艺中使用的模具被称为铸造模具&#xff0c;根据铸型的材质分为砂型铸造模具和金属型铸造模具等&#xff1b;金属型铸造模具根据压力不同可分为重力铸造模具…

【C++入门到精通】哈希 (STL) _ unordered_map _ unordered_set [ C++入门 ]

阅读导航 前言一、unordered系列容器二、unordered_map1. unordered_map简介⭕函数特点 2. unordered_map接口- 构造函数- unordered_map的容量- unordered_map的迭代器- unordered_map的元素访问- unordered_map的修改操作- unordered_map的桶操作 三、unordered_set1. unorde…

自学系列之小游戏---贪吃蛇(vue3+ts+vite+element-plus+sass)(module.scss + tsx)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、逻辑设计分析二、代码实现1.TS interface2.javascript3.页面样式&#xff08;Sass&#xff09; 三、截图展示四、总结 前言 主要技术如下&#xff1a;vue3…

微信h5支付配置,商家存在未配置的参数,请联系商家解决

对于PC端来说&#xff0c;只需要开通 native支付 就可以了 但手机端h5还需要配置支付域名&#xff0c;并且域名只需要配置一级就可以了&#xff0c;比如&#xff1a;a.test.com, b.test.com, 只需要配置 test.com 就能满足所有的二级域名了, 而不需要配置a.test.com或者b.te…

nmp、yarn、yeoman、bower是什么东西?

1&#xff1a;npm&#xff08;Node Package Manager&#xff09;&#xff1a;npm 是 Node.js 的包管理器&#xff0c;用于安装、管理和共享 JavaScript 包。它是 JavaScript 生态系统中最常用的包管理工具&#xff0c;可以轻松地安装和管理项目的依赖项。 2&#xff1a;Yarn&a…

远程桌面无法复制粘贴文件

本地通过mstsc连接到远程说面后&#xff0c;无法把本地文件复制到远程桌面上或者远程桌面的文件无法复制到本地机器修改。 思路:重启rdpclip服务 1、远程说面打开任务管理器 查看到rdpclip.exe程序&#xff0c;如果存在就关闭掉&#xff0c;不存在就跳过 2、winR打开运行&am…

2023 年 12 款最佳免费 PDF 阅读器

12 大最佳免费 PDF 阅读器 PDF 阅读器是一种可以打开 PDF 文件的软件&#xff0c;PDF 文件可能是最流行的文档格式。尽管 PDF 文件已经存在超过 25 年&#xff0c;但它仍然是 Internet 上文档的主要格式。但是&#xff0c;要打开此类文档&#xff0c;您必须在计算机上下载指定…

逐秒追加带序号输入当前时间:fgets fputs sprintf fprintf

//向某文件中逐秒追加带序号输入当前时间 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<string.h> #include <unistd.h> int main(int argc, char const *argv[]) { time_t tv; // time(&tv);//法1:获取秒数 …

css flex实现同行div根据内容高度自适应且保持一致

有情况如下&#xff1a;三个div的高度是随着内容自适应的&#xff0c;但希望每列的高度都相同&#xff0c;即&#xff0c;都与最高的相同。 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewp…

同为科技(TOWE)机架PDU产品在IDC数据中心机房建设中的应用

当今社会互联网发展迅速&#xff0c; 随着带宽需求的提升&#xff0c; 网络的保密性、安全性的要求就越来越迫切。PDU(Power Distribution Unit) 是 PDU具备电源分配和管理功能的电源分配管理器。PDU电源插座是多有设备运行的第一道也是最为密切的部件&#xff0c; PDU的好坏直…

VS Code里使用Debugger for Unity插件进行调试(2023最新版)

vs Code因为免费启动&#xff08;飓快&#xff09;的原因&#xff0c;已经成为事实的第一首选的IDE了 比sublime还快很多很多&#xff0c;其他特性包括但不限于&#xff1a; 最直接的github拉取&#xff0c;提交管理插件管理支持各种语言的识别代码分屏 是毫无疑问的第一编程…

跨境商城源码可以支持多店铺管理模式吗?

跨境商城源码是一种用于搭建跨境电商平台的模板或框架。它为开发者提供了一套完整的程序代码&#xff0c;可快速建立一个功能齐备的跨境商城网站。跨境商城源码通常具备商品展示、购物车、支付、订单管理等基础功能&#xff0c;并支持二次开发和定制。 什么是多店铺管理模式? …

忆联SR-IOV解决方案:助力云数据中心节能提效,向“绿”而行

随着AI时代的到来&#xff0c;云数据中心如何实现节能提效正成为热门话题。其中&#xff0c;SR-IOV技术凭借灵活度高以及可节约虚拟化业务算力等优势&#xff0c;是打造绿色低碳云数据中心的重要解决方案之一。 一、什么是SR-IOV 技术 SR-IOV 是由国际组织 PCI-SIG 组织定义的…

AQS是什么?AbstractQueuedSynchronizer之AQS原理及源码深度分析

文章目录 一、AQS概述1、什么是AQS2、技术解释3、基本原理4、AQS为什么这么重要 二、AQS数据结构1、AQS的结构2、ReentrantLock与AbstractQueuedSynchronizer3、AQS的state变量4、AQS的队列5、AQS的Node&#xff08;1&#xff09;Node的waitStatus&#xff08;2&#xff09;属性…

UWB工业现场数字化管理

资产管理数字化 器具场内外流转跟踪管理 无动力资产跟踪 大件地堆及成品固定区域盘点 大型资产移动/流动盘点 成品及返修车定位 无人值守人、车、物出入监测 资产移动盘点 安全生产数字化 危险区域人员/物资管理 叉车防碰撞及安全运行管理 行车防碰撞及安全运行管理 …

SLAM从入门到精通(robot上层软件开发)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们了解到&#xff0c;ros系统基本上都是依赖于ubuntu和linux来运行的。如果ros是只是跑在机器人的系统上面&#xff0c;不涉及到上层交互&am…

LeetCode:1402. 做菜顺序、2316. 统计无向图中无法互相到达点对数

1. 1402 做菜顺序 题目详细为&#xff1a; 一个厨师收集了他 n 道菜的满意程度 satisfaction &#xff0c;这个厨师做出每道菜的时间都是 1 单位时间。 一道菜的 「 like-time 系数 」定义为烹饪这道菜结束的时间&#xff08;包含之前每道菜所花费的时间&#xff09;乘以这道菜…