尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
LeetCode 628. 三个数的最大乘积
LeetCode 628 题目原文628. 三个数的最大乘积难度简单链接https://leetcode.cn/problems/maximum-product-of-three-numbers/题目描述给你一个整型数组nums在数组中找出由三个数组成的最大乘积并返回这个最大乘积。示例示例1输入nums [1,2,3]输出6示例2输入nums [1,2,3,4]输出24示例3输入nums [-1,-2,-3]输出-6提示3≤nums.length≤1043 \le nums.length \le 10^43≤nums.length≤104−1000≤nums[i]≤1000-1000 \le nums[i] \le 1000−1000≤nums[i]≤1000费曼学习法讲解破解思路假装讲给零基础同学费曼核心用大白话讲清楚找到卡壳的漏洞简化重讲。第一步看懂题目题目数组里随便挑3个不同元素相乘找乘积最大的值。坑点负数两个负数相乘是正数比如数组[-5,-4,1,2,3]最大三个正数1×2×36最小两个负数 × 最大正数(-5)*(-4)*3 60明显更大 所以只有两种候选组合最大乘积一定出自这二者之一排序后最后面最大的3个数相乘三个大数排序后最前面最小2个数很可能是两个负数 × 数组最大的数我们只算出这两个乘积返回两者中更大的那个就全部覆盖所有情况。为什么不用枚举全部三元组数组最多10000个元素枚举全部组合是O(n3)O(n^3)O(n3)超级慢完全不可行。解法1排序法简单好写面试首选思路将数组从小到大排序候选1末尾3个大数nums[-1] * nums[-2] * nums[-3]候选2前2个最小数 × 末尾最大数nums[0] * nums[1] * nums[-1]return max(候选1候选2)时间复杂度O(nlog⁡n)O(n\log n)O(nlogn)排序消耗空间原地排序O(1)O(1)O(1)Python代码每行详细注释# 导入类型注解工具leetcode提交需要ListfromtypingimportList# leetcode固定模板类classSolution:# 定义函数nums是输入数组返回int整数defmaximumProduct(self,nums:List[int])-int:# 第一步数组从小到大排序nums.sort()# 候选方案1数组排序后最后三个最大数字相乘product_max_threenums[-1]*nums[-2]*nums[-3]# 候选方案2数组前两个最小数字(负数) * 数组最大数字nums[-1]product_two_min_one_maxnums[0]*nums[1]*nums[-1]# 返回两个乘积里面较大的值就是答案returnmax(product_max_three,product_two_min_one)测试代码本地运行# 实例化类sSolution()print(s.maximumProduct([1,2,3]))# 6print(s.maximumProduct([1,2,3,4]))# 24print(s.maximumProduct([-1,-2,-3]))# -6print(s.maximumProduct([-5,-4,1,2,3]))# 60解法2一次遍历法最优时间复杂度O(n)大数据场景费曼讲解不想排序只遍历一遍数组记住5个变量最大的3个数 max1max2max3最小2个数 min1min2遍历每一个数字不断更新这5个变量最后同样算两个候选乘积。Python代码每行详细注释fromtypingimportListclassSolution:defmaximumProduct(self,nums:List[int])-int:# 初始化三个最大值负无穷任何数字都比它大max1max2max3float(-inf)# 初始化两个最小值正无穷任何数字都比它小min1min2float(inf)# 循环遍历数组中每一个数字fornuminnums:# 更新三个最大值顺序不能乱先更新最大再依次向后传递ifnummax1:# 当前数字比最大的还大原来的max1变成max2max2变成max3max3,max2,max1max2,max1,numelifnummax2:# 数字介于max1和max2之间更新max2旧max2给max3max3,max2max2,numelifnummax3:# 数字介于max2和max3之间只更新第三大max3num# 更新两个最小值ifnummin1:# 当前数字比最小的还小原来最小的变成第二小min2,min1min1,numelifnummin2:# 数字介于min1和min2之间更新第二小min2num# 候选1最大三个数相乘candidate1max1*max2*max3# 候选2两个最小 × 最大candidate2min1*min2*max1# 返回较大值returnmax(candidate1,candidate2)时间复杂度O(n)O(n)O(n)只遍历数组1次空间复杂度O(1)O(1)O(1)只用5个变量不随数组长度增加。适合海量数据场景数组长度极大的时候优先选这个。费曼查漏容易踩坑的盲区全部负数数组[-5,-4,-3,-2]排序后[-5,-4,-3,-2]候选1(-4)(-3)(-2) -24候选2(-5)(-4)(-2)-40max取-24 ✔包含0的数组[-3,-2,0,1,2](-3)(-2)2 12 0120不要暴力三重循环n10000三重循环亿亿次直接超时。应用场景举例金融风控/收益预测一组资产的涨跌幅有正有负选取3个资产组合求组合收益乘积最大值。负数代表下跌两个大跌资产反转做空大涨资产可以收益最大化。定价、折扣模型商品折扣系数数组折扣可以是负数补贴选3个系数组合计算总放大系数最大值用于营销方案测算。传感器信号处理采集一批传感器数据有正负波动从中选3个信号相乘找最强信号组合。面试算法场景这是面试经典数组题考察对负数乘法的思维不是单纯排序。两种方案对比方案时间复杂度优点缺点适用场景排序法O(n log n)代码简短好写不容易写错大数据排序稍微慢普通数组面试写代码首选单次扫描O(n)最快只扫一遍变量更新逻辑容易写反超大数组、性能敏感场景
RELATED

相关推荐

餐饮连锁销量预测:DeepSeek模型与POS系统对接实战指南

餐饮连锁销量预测:DeepSeek模型与POS系统对接实战指南

简介:这份PDF文档面向餐饮连锁企业的运营管理者、数据分析人员及技术开发者,系统讲解如何将DeepSeek销量预测模型与门店POS系统进行对接落地。内容从餐饮连锁业务特点与销量预测价值切入,逐步展开DeepSeek模型原理、POS系统架构解析、对接前准…

📅 2026/9/30 15:33:54
中望3d特征报错的原因和简易解决办法(尤其含草图特征)

中望3d特征报错的原因和简易解决办法(尤其含草图特征)

首先,简单判断方法:将鼠标悬置在报错特征上,中望3d会提示报错原因。一般存在的特征报错是因为我们更改了父特征,导致子特征报错,往往是因为我们之前选取的父特征的构成要素代号变化了,需要我们重新进行选取…

📅 2026/9/30 15:33:54
从Notebook到生产级AI工程:四层架构实战手册

从Notebook到生产级AI工程:四层架构实战手册

1. 这不是AI工具链拼装,而是从零构建AI工程能力的实操手册“AI Engineering from Scratch”——这个标题乍看像一句口号,但在我过去三年带过27个AI落地项目、亲手拆解过14家不同规模企业AI基建现状后,我敢说:它恰恰戳中了当前最普…

📅 2026/9/30 15:33:54
MORE NEWS

更多资讯

📰

VMware 安装 Windows Server 2003 虚拟机教程与避坑指南

1. 先搞清楚:为什么今天还要在 VMware 里跑 Windows Server 2003如果你在搜索引擎里敲下"VMware 虚拟机 Windows Server 2003 安装教程",大概率不是出于怀旧。我这些年被问到这个问题,基本集中在三种场景里,而且每一种都…

📰

芯片烧录自制还是外包?从量产成本到固件安全的决策指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Java线程池从入门到实战:核心参数、执行流程与避坑指南

1. Java线程池到底解决了什么问题:先算算手动new Thread的账大家最开始写Java并发代码,八成都是这个路子:来一个请求就new Thread(() -> doSomething()).start()。本地跑着没问题,功能也正常,等上了生产环境&#x…

📰

Agentic AI产品化实战:从训练营到可落地的三层设计法

1. 训练营开营时的判断:Agentic AI 产品缺的不是模型,是"产品化"1.1 三个让我决定报名的真实场景年初那阵子,朋友圈里几乎每天都能刷到新的 Agent 框架发布,GitHub 上 AutoGPT、MetaGPT 这类项目的星标数疯涨。但说实话…

📰

RAG优化别只盯着Embedding:分块、混合检索与重排序才是关键

前阵子有个做企业知识库项目的朋友问我:"我现在用的 embedding 模型在排行榜上排二十名开外,要不要直接换一个靠前的?"我反问他:"你的检索结果里,排在前三的片段能直接支撑模型给出答案的比例&#xff…

📰

Uni-app下default未导出报错的排查与修复

先说个结论:这个报错里真正值得你研究的不是default这个词,而是by和imported by后面跟着的那两串路径。之前有朋友发来一段报错截图,项目用的是 Uni-app,页面白屏,报错原文是"default" is not exported by .…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬