【ARTS】【LeetCode-2873】有序三元组中的最大值!

前言

仅做学习使用,侵删

什么是ARTS?

算法(Algorithm): 每周至少一道LeetCode算法题,加强编程训练和算法学习

阅读(Review): 阅读并点评至少一篇英文技术文章,提高英文水平

技巧 (Tip):学习至少一个技术技巧,总结、归纳日常工作中遇到的知识点

分享(Share):分析一篇有关点和思考的技术文章,建立影响力,输出价值观

算法(Algorithm)

2873.有序三元组中的最大值!

题目描述

给你一个下标从 0 开始的整数数组 nums 。
请你从所有满足 i < j < k 的下标三元组 (i, j, k) 中,找出并返回下标三元组的最大值。如果所有满足条件的三元组的值都是负数,则返回 0 。
下标三元组 (i, j, k) 的值等于 (nums[i] - nums[j]) * nums[k] 。示例 1:
输入:nums = [12,6,1,2,7]
输出:77
解释:下标三元组 (0, 2, 4) 的值是 (nums[0] - nums[2]) * nums[4] = 77 。
可以证明不存在值大于 77 的有序下标三元组。
示例 2:
输入:nums = [1,10,3,4,19]
输出:133
解释:下标三元组 (1, 2, 4) 的值是 (nums[1] - nums[2]) * nums[4] = 133 。
可以证明不存在值大于 133 的有序下标三元组。 
示例 3:
输入:nums = [1,2,3]
输出:0
解释:唯一的下标三元组 (0, 1, 2) 的值是一个负数,(nums[0] - nums[1]) * nums[2] = -3 。因此,答案是 0 。提示:
• 3 <= nums.length <= 100
• 1 <= nums[i] <= 106

解题方法

方法一:暴力求解

思路

枚举所有满足 i<j<k 的三元组 (i,j,k),返回所有值大于等于 0 的三元组的最大值。

class Solution {public long maximumTripletValue(int[] nums) {int n = nums.length;long res = 0;for (int i = 0; i < n; i++) {for (int j = i + 1; j < n; j++) {for (int k = j + 1; k < n; k++) {res = Math.max(res, (long) (nums[i] - nums[j]) * nums[k]);}}}return res;}
}
复杂度分析
  • 时间复杂度:O(n3),其中 n 是数组 nums 的长度。
  • 空间复杂度:O(1)。

方法二:贪心

思路

固定三元组 (i,j,k) 的 j 和 k 时,由值公式 (nums[i]−nums[j])×nums[k] 可知,nums[i] 取区间 [0,j) 内的最大值时,(nums[i]−nums[j])×nums[k] 最大。使用两层循环分别枚举 k 和 j,同时使用 m 维护 [0,j) 的最大值,返回所有 (m−nums[j])×nums[k] 的最大值(若所有值都为负数,则返回 0)。

class Solution {public long maximumTripletValue(int[] nums) {int n = nums.length;long res = 0;for (int k = 2; k < n; k++) {int m = nums[0];for (int j = 1; j < k; j++) {res = Math.max(res, (long)(m - nums[j]) * nums[k]);m = Math.max(m, nums[j]);}}return res;}
}
复杂度分析
  • 时间复杂度:O(n2),其中 n 是数组 nums 的长度。
  • 空间复杂度:O(1)。

方法三:贪心 + 前后缀数组

思路

令数组 nums 的长度为 n。根据值公式 (nums[i]−nums[j])×nums[k] 可知,当固定 j 时,nums[i] 和 nums[k] 分别取 [0,j) 和 [j+1,n) 的最大值时,三元组的值最大。我们使用 leftMax[j] 和 rightMax[j] 维护前缀 [0,j) 最大值和后缀 [j+1,n) 最大值,依次枚举 j,计算值 (leftMax[j]−nums[j])×rightMax[j],返回最大值(若所有值都为负数,则返回 0)。

public class Solution {public long maximumTripletValue(int[] nums) {int n = nums.length;int[] leftMax = new int[n];int[] rightMax = new int[n];for (int i = 1; i < n; i++) {leftMax[i] = Math.max(leftMax[i - 1], nums[i - 1]);rightMax[n - 1 - i] = Math.max(rightMax[n - i], nums[n - i]);}long res = 0;for (int j = 1; j < n - 1; j++) {res = Math.max(res, (long)(leftMax[j] - nums[j]) * rightMax[j]);}return res;}
}
复杂度分析
  • 时间复杂度:O(n),其中 n 是数组 nums 的长度。
  • 空间复杂度:O(n)。

方法四:贪心

思路

类似于方法三,我们固定 k,那么当 nums[i]−nums[j] 取最大值时,三元组的值最大。我们可以用 imax 维护 nums[i] 的最大值,dmax 维护 nums[i]−nums[j] 的最大值,在枚举 k 的过程中,更新 dmax 和 imax。

class Solution {public long maximumTripletValue(int[] nums) {int n = nums.length;long res = 0, imax = 0, dmax = 0;for (int k = 0; k < n; k++) {res = Math.max(res, dmax * nums[k]);dmax = Math.max(dmax, imax - nums[k]);imax = Math.max(imax, nums[k]);}return res;}
}
复杂度分析
  • 时间复杂度:O(n),其中 n 是数组 nums 的长度。
  • 空间复杂度:O(1)。

分享(Share)

文章阅读

BeanUtils对比 12 种 Bean 自动映射工具,就它性能最拉跨_java beanutils modelmapper-CSDN博客

危险!请马上替换代码中的BeanUtils!!!

因为现在系统中正在使用BeanUtils 看到文章,但是经过询问基本不会出现这种问题

接口 TPS是什么

接口 TPS(Transactions Per Second)是指每秒钟系统能够处理的接口事务数量,它是衡量系统性能的重要指标之一。一个事务是指一个客户端向服务器发送请求,服务器进行处理并返回响应的完整过程。在接口性能测试中,TPS 常被用来评估接口的处理能力。TPS 值越高,说明系统在单位时间内能够处理更多的事务,性能越好

参考资料

作者:力扣官方题解

链接:2873. 有序三元组中的最大值 I - 力扣(LeetCode)

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

相关文章

基于spring boot 鲜花销售系统PPT(源码+lw+部署文档+讲解),源码可白嫖!

课题意义 随着网络不断的普及发展&#xff0c;鲜花销售系统依靠网络技术的支持得到了快速的发展&#xff0c;首先要从用户的实际需求出发&#xff0c;通过了解用户的需求开发出具有针对性的信息管理系统&#xff0c;利用目前网络给用户带来的方便快捷这一特点对系统进行调整&am…

Redis常用的数据结构及其使用场景

字符串(String) string 是 redis 最基本的类型&#xff0c;你可以理解成与 Memcached 一模一样的类型&#xff0c;一个 key 对应一个 value。 string 类型是二进制安全的。意思是 redis 的 string 可以包含任何数据&#xff0c;比如jpg图片或者序列化的对象。 string 类型是 R…

设计模式简述(五)建造者模式

建造者模式 描述基本要素协调类使用 描述 建造者模式属于创造型设计模式。 通常用于构建一系列复杂对象&#xff0c;这些对象有一定的共性。 我们可以通过不同的建造者&#xff0c;组装不同的对象 与工厂模式的区别&#xff0c;建造者模式更侧重与基于基础构件组装而非直接创…

Java基础 4.6

1.成员方法练习 //编写类A&#xff1a;判断一个数是奇数还是偶数&#xff0c;返回boolean //根据行、列、字符打印对应行数和列数的字符&#xff0c;比如&#xff1a;行4 列4 字符# 则打印相应的效果 public class MethodExercise01 {public static void main(String[] args) …

前端快速入门学习4——CSS盒子模型、浮动、定位

一、盒子模型 所有HTML元素可以看作盒子&#xff0c;在CSS中&#xff0c;"box model"这一术语是用来设计和布局时使用。 CSS盒模型本质上是一个盒子&#xff0c;封装周围的HTML元素&#xff0c;它包括&#xff1a;边距&#xff0c;边框&#xff0c;填充&#xff0c…

瑞数信息发布《BOTS自动化威胁报告》,揭示AI时代网络安全新挑战

近日&#xff0c;瑞数信息正式发布《BOTS自动化威胁报告》&#xff0c;力求通过全景式观察和安全威胁的深度分析&#xff0c;为企业在AI时代下抵御自动化攻击提供安全防护策略&#xff0c;从而降低网络安全事件带来的影响&#xff0c;进一步增强业务韧性和可持续性。 威胁一&am…

Docker设置代理

目录 前言创建代理文件重载守护进程并重启Docker检查代理验证 前言 拉取flowable/flowable-ui失败&#xff0c;用DaoCloud源也没拉下来&#xff0c;不知道是不是没同步。索性想用代理拉镜像。在此记录一下。 创建代理文件 创建docker代理配置 sudo mkdir -p /etc/systemd/s…

Debezium嵌入式连接postgresql封装服务

文章目录 1.项目结构&#xff1a;2.依赖&#xff1a;3.application.properties4.DebeziumConnectorConfig类5.TableEnum类6.TableHandler接口&#xff08;表处理抽象&#xff09;7.DefaultTableHandler默认实现类8.UserTableHandler处理类9.TableHandlerFactory工厂10.Debezium…

ER-图,详情和画法

一、E-R图的核心元素 1.实体 表示现实中对象或概念&#xff0c;用矩形表示 示例&#xff1a;用户、老师、学生 2.属性 描述实体的特征&#xff0c;用椭圆表示。 分为主键&#xff08;用户id&#xff09; 和非主键&#xff08;用户昵称&#xff09; 3.关系 表示实体间的…

Windows Flip PDF Plus Corporate PDF翻页工具

软件介绍 Flip PDF Plus Corporate是一款功能强大的PDF翻页工具&#xff0c;也被称为名编辑电子杂志大师。这款软件能够迅速将PDF文件转换为具有翻页动画效果的电子书&#xff0c;同时保留原始的超链接和书签。无论是相册、视频、音频&#xff0c;还是Flash、视频和链接&#…

Linux文件系统中的Page Cache和内存管理中的Page之间的关系

Linux文件系统中的Page Cache和内存管理中的Page之间有密切的关联&#xff0c;两者在底层机制上紧密结合&#xff0c;共同实现高效的内存和文件系统管理。以下是它们的关系和关键点&#xff1a; 核心关系 Page Cache的底层是内存Page Page Cache是由内存管理中的物理内存页&…

每日一个小病毒(C++)EnumChildWindows+shellcode

这里写目录标题 1. `EnumChildWindows` 的基本用法2. 如何利用 `EnumChildWindows` 执行 Shellcode?关键点:完整 Shellcode 执行示例3. 为什么 `EnumChildWindows` 能执行 Shellcode?4. 防御方法5. 总结EnumChildWindows 是 Windows API 中的一个函数,通常用于枚举所有子窗…

AI爬虫?爬!

1.你是否还在为大模型的key而感到忧伤和囊中羞涩&#xff0c;openrouter.ai&#xff0c;目前可免费白嫖多个大模型&#xff0c;代码如下 from openai import OpenAIclient OpenAI(base_url"https://openrouter.ai/api/v1",api_key"", )completion clien…

洛谷题单3-P5720 【深基4.例4】一尺之棰-python-流程图重构

题目描述 《庄子》中说到&#xff0c;“一尺之棰&#xff0c;日取其半&#xff0c;万世不竭”。第一天有一根长度为 a a a 的木棍&#xff0c;从第二天开始&#xff0c;每天都要将这根木棍锯掉一半&#xff08;每次除 2 2 2&#xff0c;向下取整&#xff09;。第几天的时候木…

c++中的auto关键字

在 C 中&#xff0c;auto 是一个类型推断关键字&#xff08;C11 引入&#xff09;&#xff0c;允许编译器根据变量的初始化表达式自动推导其类型。它极大地简化了代码编写&#xff0c;尤其在涉及复杂类型或模板的场景中。以下是 auto 的详细说明&#xff1a; 1. 基本用法 1.1 …

开发指南111-关闭所有打开的子窗口

门户系统是通过window.open通过单点登录的模式打开子系统的&#xff0c;这就要求门户系统退出时&#xff0c;关闭所有打开的子系统。 平台处理这一问题的核心原理如下&#xff1a; 主窗口定义&#xff1a; allChildWindows:[], //所有子窗口 pushChildWindow(childWindow){ …

Kotlin语言进阶:协程、Flow、Channel详解(二)

Kotlin语言进阶:协程、Flow、Channel详解(二) 一、Flow基础 1.1 什么是Flow Flow是Kotlin提供的用于处理异步数据流的解决方案,它建立在协程之上,具有以下特点: 冷流特性:只有在收集时才会开始发射数据背压处理:自动处理生产者和消费者速度不匹配的问题组合操作:提…

mysql中my.cnf权限不能过大。否则无法生效

mysql 报错 World-writable config file ‘/etc/my.cnf‘ is ignored. /etc/my.cnf 配置文件, 或着docker 挂载的配置文件(宿主机中的配置文件),权限过大 如是二进制启动 chmod 644 /etc/my.cnf 如是docker启动 chmod 644 /opt/docker-data/mysql/conf/my.cnf 重启服务,就可…

Spring 中的 @Autowired 和 @Resource

&#x1f9e9; 一、Autowired 和 Resource 的基本作用 注解来源作用AutowiredSpring 提供&#xff08;org.springframework.beans.factory.annotation.Autowired&#xff09;按类型 自动注入ResourceJDK 提供&#xff08;javax.annotation.Resource&#xff09;默认按名称 注入…

anomalib—2—输入图像大小调整

三个地方 第一&#xff1a;在定义model时&#xff0c;要在pre_processor里面去定义一个前处理&#xff0c;前处理就一个功能&#xff0c;定义图像的大小 pre_processor0 Patchcore.configure_pre_processor( image_size (128, 128)) model Patchcore( backbone"wide_r…