当前位置: 首页 > news >正文

力扣hot100:乘积最大的子数组

题目描述:

思路:

对于每个位置i,我们要计算以nums[i]为结尾的子数组的最大乘积和最小乘积。

  • 最大乘积:最大乘积子数组可以通过前面的最大乘积或者最小乘积来扩展,尤其是当数组中有负数时,最小乘积可能会与负数相乘变成最大的乘积。

  • 最小乘积:最小乘积子数组同样可以通过前面的最大乘积或者最小乘积来扩展,尤其是负数的情况下。

为了在每一步都记录最大乘积和最小乘积,我们使用两个数组fmaxfmin

  • fmax[i]:表示以nums[i]为结尾的最大乘积。

  • fmin[i]:表示以nums[i]为结尾的最小乘积。

状态转移方程:
  • 对于fmax[i]

    • fmax[i] = max(fmax[i-1] * nums[i], fmin[i-1] * nums[i], nums[i])

      • fmax[i-1] * nums[i]:将前面的最大值乘上当前元素。

      • fmin[i-1] * nums[i]:将前面的最小值乘上当前元素,负负得正,可能会变成最大值。

      • nums[i]:单独作为一个新的子数组。

  • 对于fmin[i]

    • fmin[i] = min(fmax[i-1] * nums[i], fmin[i-1] * nums[i], nums[i])

      • fmax[i-1] * nums[i]:将前面的最大值乘上当前元素,可能会变成最小值。

      • fmin[i-1] * nums[i]:将前面的最小值乘上当前元素,可能会变成最小值。

      • nums[i]:单独作为一个新的子数组。

最终结果:
  • 在每一步的fmax[i]记录了以nums[i]为结尾的最大乘积,我们最后只需要返回fmax数组中的最大值即可。

代码:

class Solution { public int maxProduct(int[] nums) { int n = nums.length; int[] fmax = new int[n]; // 存储到当前位置的最大乘积 int[] fmin = new int[n]; // 存储到当前位置的最小乘积 fmax[0] = fmin[0] = nums[0]; // 初始化第一个元素 // 从第二个元素开始计算 for (int i = 1; i < n; i++) { int x = nums[i]; // 计算当前位置的最大和最小乘积 fmax[i] = Math.max(Math.max(fmax[i-1] * x, fmin[i-1] * x), x); fmin[i] = Math.min(Math.min(fmax[i-1] * x, fmin[i-1] * x), x); } // 返回 fmax 数组中的最大值,即最大乘积 return Arrays.stream(fmax).max().getAsInt(); } }

代码解释:

  1. 初始化

    • fmax[0] = fmin[0] = nums[0]:初始化第一个元素的最大乘积和最小乘积为nums[0]

  2. 动态规划计算

    • i = 1开始,遍历整个数组,对于每个元素nums[i],根据状态转移方程计算fmax[i]fmin[i]

    • fmax[i]通过比较前一个元素的最大乘积和最小乘积乘以当前元素,或者仅仅是当前元素本身,得到当前位置的最大乘积。

    • fmin[i]通过同样的方式得到当前位置的最小乘积。

  3. 返回最大值

    • Arrays.stream(fmax).max().getAsInt():计算fmax数组中的最大值,返回整个数组的最大乘积。

http://www.jsqmd.com/news/431312/

相关文章:

  • 2026年比较好的铝艺护栏/铝艺门公司口碑哪家靠谱 - 行业平台推荐
  • 2026年3月金属管浮子流量计厂家推荐,直观可靠流量监测仪 - 品牌鉴赏师
  • 2026年知名的自动喷砂机/环保喷砂机实力厂家如何选 - 行业平台推荐
  • 塑料聚乙烯转换为汽油Octane CH3(CH2)6CH3
  • ssm+java2026年毕设汽车租赁系统【源码+论文】
  • ssm+java2026年毕设前端动漫推广站定制【源码+论文】
  • 2026年3月平板离心机厂家推荐,结构稳固故障率低 - 品牌鉴赏师
  • 2026年热门的功能五金/房门功能五金源头厂家推荐几家 - 行业平台推荐
  • 2026年3月具身智能体厂家推荐,精准检测与性能深度解析 - 品牌鉴赏师
  • 2026年质量好的军用铝板/6061铝板专业制造厂家推荐 - 行业平台推荐
  • 2026年热门的家具智能五金/智能五金可靠供应商推荐 - 行业平台推荐
  • 2026年3月全自动灌装机厂家推荐,省人工高效率生产线 - 品牌鉴赏师
  • 2026年靠谱的不锈钢丸喷砂机磨料/尼龙砂喷砂机磨料源头工厂推荐 - 行业平台推荐
  • 2026年3月丝网印刷机厂家推荐,精准检测与稳定性能深度解析 - 品牌鉴赏师
  • 2026年评价高的硬铝铝材/铝材实力品牌厂家推荐 - 行业平台推荐
  • ssm+java2026年毕设汽车租赁网站【源码+论文】
  • 2026年3月专精特新小巨人代理申报机构,材料梳理深度解析 - 品牌鉴赏师
  • 想找废气处理设备厂家?2026年2月热门名单及电话来了,进口滤芯/保安过滤器滤芯/纯水机滤芯,废气处理设备厂商推荐榜 - 品牌推荐师
  • 2026年3月过滤机厂家最新推荐,矿山冶金行业专用设备 - 品牌鉴赏师
  • 【日记】从来拖延症……(531 字)
  • 2026年评价高的销毁服务公司推荐:四川销毁服务、处理过期食品、成都专业销毁中心、成都产品销毁公司选择指南 - 优质品牌商家
  • 2026年口碑好的工务段铁路施工预警/铁路施工生产商哪家强 - 行业平台推荐
  • RCC时钟
  • 探讨品爱家具品牌,好用不佛山用户选哪家性价比高 - 工业品牌热点
  • 不踩雷!AI论文软件 千笔ai写作 VS 灵感ai,专科生专属推荐
  • AI元人文:在未来复杂社会中没
  • 2026年重庆短视频运营公司排名,求推荐性价比高的企业 - 工业设备
  • Java小白求职者面试实录:从Spring Boot到微服务架构的深入解析
  • 如何快速完成采购寻源工作,并分析供应商的优劣势?
  • 2026年靠谱的防锈润滑剂/润滑剂优质供应商推荐 - 行业平台推荐