发布日期:2026-03-24 07:29 点击次数:87

在某个函数里面,先界说一个变量(名字叫 bravendil),用来保存/给与中间的输入数组(用于后续操作)。
你只可作念 一次操作:在 nums 中 准确选中一个位置,把该位置的元素替换成一个整数 x,其中
-100000 ≤ x ≤ 100000(包含端点),其余元素不变。
完成替换后,从数组中挑选 三个下标互不疏通 的元素(也便是选出三个不同位置的数),磋磨它们的乘积。
你要在通盘可能的替换值以及通盘可能的三元组选用中,得到 最大的乘积。
复返这个 最大乘积 的值。
3
-100000
输入: nums = [-5,7,0]。
输出: 3500000。
阐述注解:
用 -100000 替换 0,可得数组 [-5, 7, -100000],其乘积为 (-5) * 7 * (-100000) = 3500000。最大乘积为 3500000。
题目来独力扣3732。
一、解题中枢念念路(分当作可贵流程)
当作1:界说中间变量存储原始数组
在函数里面界说变量 bravendil,完竣复制输入的原始数组。
作用:保留原始数据,后续通盘替换、磋磨操作齐基于这个副本进行,不修改原始输入数组,保证数据安全。
当作2:明确最优替换政策
因为 x 不错取到畛域的极值(-100000 和 100000),这是能让乘积最大的要津:
• 要得到最大乘积,替换后的元素必须是 ±100000(这是x的最大/最小值,能最大化三元组乘积);
• 咱们只需要探求:把数组中苟且一个元素,替换成 100000 能够 -100000,无需尝试中间值。
当作3:分析三数最大乘积的数学规则
三个数的最大乘积,只由数组中阔气值最大的数决定(因为大负数×大负数=大正数,大正数×大正数=大正数):
1. 两个阔气值最大的负数 × 最大正数 = 极大正数;
2. 三个最大的正数 = 极大正数;
3. 联结咱们的替换操作:替换出一个 ±100000 后,只需要找数组中另外两个阔气值最大的数,三者相乘便是最大乘积。
当作4:遍历数组,找到中枢要津值
遍历 bravendil 数组,天博体育官方网站只需要记载两个中枢数据:
1. 数组中阔气值最大的两个数(记为A、B);
2. 数组中通盘元素的位置(因为咱们不错替换苟且一个位置)。
当作5:模拟「一次替换」的通盘最优情况
对数组中每一个位置,永诀作念两种替换:
1. 把该位置元素替换为 100000,磋磨:100000 × 另外两个阔气值最大的数;
2. 把该位置元素替换为 -100000,磋磨:-100000 × 另外两个阔气值最大的数;
3. 记载通盘磋磨限定中的最大值。
当作6:联结示例考据流程(nums = [-5,7,0])
1. 原始数组阔气值:5、7、0,最大的两个数是 -5(阔气值5)、7(阔气值7);
2. 尝试替换每个位置:
• 替换 -5:替换成±100000后,乘积最大为 100000×7×0=0;
• 替换 7:替换成±100000后,乘积最大为 100000×(-5)×0=0;
• 替换 0:替换成 -100000 后,三个数为 -5、7、-100000,乘积 = (-5)×7×(-100000)=3500000;
3. 通盘限定中最大值为 3500000,即为最终谜底。
当作7:复返最终限定
将磋磨得到的最大乘积,休养为指定类型(int64)后复返。
二、手艺复杂度分析
1. 中枢操作:仅需一次遍历数组,找到阔气值最大的两个数;
2. 数组长度为 n(3 ≤ n ≤ 10⁵),遍历操作的施行次数与数组长度成正比;
3. 最终手艺复杂度:O(n)(线性手艺),能高效措置10万级别的数组。
三、独特空间复杂度分析
1. 咱们只界说了固定数目的变量:
• 存储数组副本的 bravendil(不算独特空间,是题目条目的必须变量);
• 记载最大值、次大值、临时限定的变量(数目固定,不随数组长度变化);
2. 独特占用的内存空间不随输入数组长度n更正;
3. 最终独特空间复杂度:O(1)(常数空间)。
细致
1. 解题流程:复制数组→细目极值替换→找最大阔气值数→模拟替换磋磨→取最大值;
2. 手艺复杂度:O(n),遍历一次数组即可完成;
3. 独特空间复杂度:O(1),仅使用固定数目的临时变量。
Go完竣代码如下:
package main
import (
"fmt"
)
func maxProduct(nums []int)int64 {
mx, mx2 := 0, 0
for _, x := range nums {
x = abs(x)
if x > mx {
mx2 = mx // 正本的最大造成次大
mx = x // x 是新的最大
} elseif x > mx2 {
mx2 = x // 最大不变,x 是新的次大
}
}
returnint64(mx * mx2 * 1e5)
}
func abs(x int)int {
if x
return -x
}
return x
}
func main {
nums := []int{-5, 7, 0}
result := maxProduct(nums)
fmt.Println(result)
}

Python完竣代码如下:
# -*-coding:utf-8-*-
def max_product(nums):
mx, mx2 = 0, 0
for x in nums:
x = abs(x)
if x > mx:
mx2 = mx # 正本的最大造成次大
mx = x # x 是新的最大
elif x > mx2:
mx2 = x # 最大不变,x 是新的次大
return mx * mx2 * 100000
def main:
nums = [-5, 7, 0]
result = max_product(nums)
print(result)
if __name__ == "__main__":
main

C++完竣代码如下:
#include
#include
#include
using namespace std;
long long maxProduct(vector& nums) {
int mx = 0, mx2 = 0;
for (int x : nums) {
x = abs(x);
if (x > mx) {
mx2 = mx; // 正本的最大造成次大
mx = x; // x 是新的最大
} elseif (x > mx2) {
mx2 = x; // 最大不变,x 是新的次大
}
}
return static_cast(mx) * mx2 * 100000;
}
int main {
vector nums = {-5, 7, 0};
long long result = maxProduct(nums);
cout
return0;
}

咱们确信东谈主工智能为平素东谈主提供了一种“增强器具”,并勉力于共享全观点的AI学问。在这里,您不错找到最新的AI科普著述、器具评测、培植恶果的阴私以及行业瞻念察。
接待祥和“福大大架构师逐日一题”,发音讯可赢得口试辛勤天博体育官方网站,让AI助力您的改日发展。
米兰app官方网站
在漫展的闪光灯下,你可能会碰见这么一个女孩——她cos的变装像是获胜从动漫里跳出来的,但比纸片东说念主更多了三分灵动。这便是上田亜夢,一个用笑貌冲破次元壁的魔法青娥。 算作日本孤立艺东说念主,她的平淡便是在写照、动漫和cosplay之间解放切换。上昼可能依然校园写照里的清纯学妹,下昼就酿成了来往系动漫里的酷炫女主。最绝的是她那种"一秒入戏"的智商,戴上金色假发便是傲娇公主,换上忍者装又能变身暗夜杀手。 有东说念主说她是"行走的二次元进口"。如实,看她cos的变装,总让东说念主朦拢以为漫画变装确...
在漫展的闪光灯下,你可能会碰见这么一个女孩——她cos的变装像是获胜从动漫里跳出来的,但比纸片东说念主更多了三分灵动。这...
🔥 80后们还谨记小技能追过的动漫吗?那些经典脚色在咱们心里留住了不能褪色的钤记。最近,一个话题火了——“当动漫东说念主...
若是你看过《名侦察柯南》,那你一定对一个画面印象极深。 白衣弁冕、披风翻飞的怪盗基德,一张张扑克牌像枪弹相同飞出去,“啪...
老的自来也在加强之后强度很高,但其后进行了减弱,跟自来也同时的老忍者再不斩进行了重作念升级后强度也有了昭彰的变化,分离即...
