算法练习8——有序三元组中的最大值

news/2024/10/17 23:34:48/

LeetCode 100088 有序三元组中的最大值 I
LeetCode 100086 有序三元组中的最大值 II

给你一个下标从 0 开始的整数数组 nums 。
请你从所有满足 i < j < k 的下标三元组 (i, j, k) 中,找出并返回下标三元组的最大值。如果所有满足条件的三元组的值都是负数,则返回 0 。
下标三元组 (i, j, k) 的值等于 (nums[i] - nums[j]) * nums[k] 。

简单题我重拳出击,中等题我唯唯诺诺

蛮力法

class Solution:def maximumTripletValue(self, nums: List[int]) -> int:array = [0] * len(nums)for i in range(2, len(nums)):for j in range(i):for k in range(j, i):array[i] = max(array[i], (nums[j] - nums[k]) * nums[i])return max(array)

上面开的数组可以省略

贪心???
这应该是最优解了,思路如下:

  1. 目标是获取全局(nums[i] - nums[j]) * nums[k]最大值
  2. 转化问题,固定k,算出一个局部最大值序列[(nums[i] - nums[j]) * nums[0]], (nums[i] - nums[j]) * nums[1], ...,然后求序列中最大值
  3. 现在需要求nums[i] - nums[j]的最大值,当k=n时,假定nums[i] - nums[j]的最大值为a,此时a是由nums[:n]中的值计算出的,当k=n+1时,假定nums[i] - nums[j]的最大值为b,此时b是由nums[:n+1]中的值计算出的,可以发现,相邻两个nums[i] - nums[j]的最大值计算用的序列差一个最新的nums[n],此时有这么一个关系k=n时nums[i] - nums[j]的最大值自身max(nums[:n]) - nums[n]两者中的最大值
  4. 这样有如下代码
class Solution:def maximumTripletValue(self, nums: List[int]) -> int:# 当前最大值curr_max = 0# 当前最大的 nums[i] - nums[j]curr_v = 0# 当前最大的 (nums[i] - nums[j]) * nums[k]ans = 0n = len(nums)for i in range(n):# 答案的最大值根据最大的 nums[i] - nums[j] 和当前数值的乘积更新ans = max(ans, nums[i] * curr_v)# nums[i] - nums[j] 的最大值根据此前最大值减去当前数值更新curr_v = max(curr_v, curr_max - nums[i])# 更新前缀最大值curr_max = max(curr_max, nums[i])return ans# 作者:小羊肖恩
# 链接:https://leetcode.cn/problems/maximum-value-of-an-ordered-triplet-ii/
# 来源:力扣(LeetCode)
# 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

http://www.ppmy.cn/news/1132034.html

相关文章

在Qt中,怎么获取到在mainwindow.ui文件中添加的控件

2023年9月30日&#xff0c;周六晚上 假设我在mainwindow.ui中添加了一个名为textEdit的QTextEdit对象 在mainwindow.cpp中&#xff0c;可以通过ui对象来获取到这个控件

《Jetpack Compose从入门到实战》 第二章 了解常用UI组件

目录 常用的基础组件文字组件图片组件按钮组件选择器组件对话框组件进度条组件 常用的布局组件布局Scaffold脚手架 列表 书附代码 Google的图标库 常用的基础组件 文字组件 Composable fun TestText() {Column(modifier Modifier.verticalScroll(state rememberScrollState…

【面试经典150 | 矩阵】有效的数独

文章目录 写在前面Tag题目来源题目解读解题思路方法一&#xff1a;一次遍历数组 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结…

Java中那么多排序方法该怎么选择呢

在 Java 中&#xff0c;有几种常用的排序方法&#xff0c;比如 Arrays.sort 、Collections.sort 和集合自身的 sort 方法。本文将对这三种排序方法的用法、区别和应用场景进行总结。 Arrays.sort Arrays.sort 方法是 Java 中用于对数组进行排序的方法。它可以处理基本类型和对…

Visual Studio Code键盘快捷键大全

Visual Studio Code键盘快捷键大全 前言导航快捷键编辑快捷键多光标快捷键终端快捷键调试快捷键文件管理快捷键Git快捷键代码格式化快捷键代码折叠快捷键工作区快捷键Markdown快捷键Zen模式快捷键窗口管理快捷键重构快捷键IntelliSense快捷键测试快捷键扩展快捷键 前言 欢迎来…

基于Java的汽车票网上预订系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

VSCode 使用 Vue2.0 通用结构模板

安装vscode 官网&#xff1a;https://code.visualstudio.com/ 安装 Vetur 插件&#xff0c;识别 vue 文件 应用商店中搜索 Vetur&#xff0c;点击安装&#xff0c;安装完成之后点击重新加载 新建代码片段 文件 ➡ 首选项 ➡ 用户代码片段 ➡ 点击新建全局代码片段 ➡ 取名…

FPGA片内ROM读写测试实验

文章目录 前言一、准备 ROM 初始化文件二、创建及配置工程1、创建工程2、添加 ROM IP核3、添加 ILA IP 核 三、程序编写1、新建测试程序2、新建仿真文件 四、进行仿真五、下载到 FPGA六、资源自取 前言 FPGA 本身是 SRAM 架构的&#xff0c;断电之后程序就会消失&#xff0c;那…