Maximum Product Subarray
发布日期:2025-04-13 09:30:18 浏览次数:15 分类:精选文章

本文共 1361 字,大约阅读时间需要 4 分钟。

为了找到数组中最大的子数组乘积,我们可以使用两个变量来跟踪当前的最大正乘积和最大负乘积。遍历数组时,根据当前元素的正负,更新这两个变量,并每次更新结果。

步骤如下:

  • 初始化两个变量 posneg,分别表示当前的最大正乘积和最大负乘积。初始时,pos 为数组的第一个元素的正值或0,neg 为数组的第一个元素的负值或0。
  • 遍历数组,从第二个元素开始:
    • 如果当前元素为0,重置 posneg 为0。
    • 如果当前元素为正数,更新 pos 为当前元素或 pos 乘以当前元素的最大值,negneg 乘以当前元素。
    • 如果当前元素为负数,更新 posneg 乘以当前元素,neg 为当前元素或 pos 乘以当前元素的最小值。
  • 每次更新后,比较当前最大值 resultposneg 的最大值,更新 result
  • 返回 result
  • 代码示例:

    public class Solution {    public int maxProduct(int[] A) {        if (A == null || A.length == 0) {            return 0;        }        int result = A[0];        int pos = A[0] > 0 ? A[0] : 0;        int neg = A[0] < 0 ? -A[0] : 0;        for (int i = 1; i < A.length; i++) {            if (A[i] == 0) {                pos = 0;                neg = 0;            } else if (A[i] > 0) {                pos = Math.max(A[i], pos * A[i]);                neg = neg * A[i];            } else {                int old_pos = pos;                pos = neg * A[i];                neg = Math.min(A[i], old_pos * A[i]);            }            result = Math.max(result, Math.max(pos, neg));        }        return result;    }}

    详细解释:

    • 初始化posneg 初始化为数组的第一个元素的正负值或0。
    • 遍历数组:对于每个元素,根据其正负,更新 posneg
      • 正数:更新 pos 为当前元素或 pos 乘以当前元素的最大值,negneg 乘以当前元素。
      • 负数:更新 posneg 乘以当前元素,neg 为当前元素或 pos 乘以当前元素的最小值。
    • 更新结果:每次遍历后,更新 result 为当前 posneg 中的最大值。

    这种方法确保了在每一步都能跟踪到可能的最大乘积,时间复杂度为 O(n),适用于较大的数组。

    上一篇:maxView Storage Manager系统 dynamiccontent.properties.xhtml RCE漏洞复现
    下一篇:MaxCompute访问TableStore(OTS) 数据(20170601更新)

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年05月22日 20时12分19秒