当前位置: 首页 > 知识库问答 >
问题:

数组中最大邻接积的打印子数组

颜英博
2023-03-14

最大乘积子数组给定一个数组包含正整数和负整数,求最大乘积的子数组。例子:

public int maxProductSubArray(int arr[], int len) {

        int res = arr[0];

        int max = arr[0];
        int min = arr[0];

        for (int i = 1; i < len; i++) {

            int temp = max;

            max = Math.max(Math.max(max * arr[i], min * arr[i]), arr[i]);
            min = Math.min(Math.min(temp * arr[i], min * arr[i]), arr[i]);

            res = Math.max(res, max);
        }

        return res;

    }

但不能破题找到子数组。

共有1个答案

孙凌龙
2023-03-14

通过分而治之可以有效地解决这个问题。

假设您想要解决子数组[l,r]的问题;然后,假设c=(l+r)/2,该解决方案要么是[l,c]中的子数组,要么是[c+1,r]中的子数组,或者是包含cc+1的子数组。

然后定义一个函数f(l,r),返回子段的答案;然后,要计算这个函数,首先递归调用f(l,c)f(c+1,r),并选择最大值作为临时答案。然后计算段的乘法[c,c],然后[c-1,c]等等(使用[c-k,c]的乘法=[c-k+1,c]*数组[c-k])并计算所有这些段的最大乘法和最小乘法。对c([c+1,c+1][c+1,c+2]等等)右边的段执行相同的操作,然后,答案将是一个临时答案,即最大值的乘法或最小值的乘法或最小值和最大值的乘法,反之亦然(如果乘法为负数,则需要最小乘以最大值)。返回这四个值之间的最大值或临时答案作为函数结果。

如果有必要,不仅返回乘法函数的值,还可以返回到达这些值的段。

此解决方案使用θ(n log n)时间和θ(n)空间。

 类似资料:
  • 有没有一种方法可以在小于O(n^2)的时间内做到这一点。 O(nlogn)还是O(n)?

  • null 我的代码使用一个递归函数和一个helper print()函数来查找这些数字中最大的一个 编辑:发布print()函数,我不知何故错过了这个函数

  • int main() { int array[201]; int i; for (i = 0; i < 201; i++) array[i] = i; return 0; } 技巧 在gdb中,如果要打印大数组的内容,缺省最多会显示200个元素: (gdb) p array $1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,

  • 在长度为N的数组中求和最大的邻接子数组。 输入格式: 输出格式: 返回一个整数,表示相邻子数组的最大可能和。 制约因素: 输入2:A=[-2,1,-3,4,-1,2,1,-5,4] 产出2:6 说明2:子数组[4,-1,2,1]的最大可能和为6。 你能告诉我为什么下面的代码不起作用,代码中的错误是什么吗:

  • 所以,我刚刚进行了一次在线编程评估,给了我两个问题,其中一个是这个连续的子数组和提供了两个复杂的编码问题+8个MCQ,并将在1小时内完成。 这里我将讨论上面提到的子数组的最大邻接和之一。通常,我发现困难的部分是处理负数和连续。我所做的是首先将应用到给定的数组,然后再次按照负值的绝对值排序,就像i的例如,对于给定的随机数组,我在每个i和所有j迭代后都有一个max,如果max 。

  • 给出了一个由N个整数组成的数组。 数组的最大和是该数组的非空连续子数组的元素的最大和。 例如,数组[1,-2,3,-2,5]的最大和是6,因为子数组[3,-2,5]的和是6,并且不可能实现更大的子数组和。 现在,您只能从给定数组中删除一个以上的元素。这样做可以得到的结果数组的最大可能最大和是多少? 我正在用我自己的测试用例测试我的代码。我在Dev-C++上得到了正确的输出。但是当我在网上测试我的代