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

用Kadanes算法求最大乘积子阵的值域

李言
2023-03-14

应用Kadane算法得到最大乘积子数组是一个棘手的问题。虽然我能够得到最大乘积,但我并没有真正得到最大乘积子数组的正确范围。

有人能帮我了解一下射程问题吗?这是一个标准的面试问题,我想确保我理解了乘积情况的逻辑,而不仅仅是说可以修改最大和子数组来回答最大乘积子数组的情况。

谢谢!!

共有1个答案

张和颂
2023-03-14

您提供的链接似乎假设所有元素都是正的。然而,在我看来,这不是一个安全的假设。我有返回代码,以获得最大乘积的子数组。我已经使用了卡丹算法中使用的相同逻辑。代码似乎对我来说适用于各种输入。如果有问题请让我知道。

public static int[] getMaxSubArray(int []arr){

    int maxEndingHere = arr[0], maxSoFar = arr[0], startIndex =0, start =0,end=0;

    for(int i=1;i<arr.length;i++){

        if(maxEndingHere<0){
            maxEndingHere = arr[i];
            startIndex = i;         
        }else{          
            maxEndingHere *= arr[i];
        }           
        if(maxEndingHere>=maxSoFar){
            maxSoFar = maxEndingHere;
            start = startIndex;
            end = i;
        }   
    }       
    if(start<=end)
        return Arrays.copyOfRange(arr, start, end+1);

    return null;
}
  1. 示例输入={6,3,-10,0,2}输出={6,3}
  2. 示例输入={-2,1,-3,4,-1,2,1,-5,4}输出={4}
  3. 示例输入={-1,-2,-9,-6}输出={-1}
 类似资料:
  • 我有两个矩阵m1和m2: 乘法的结果是: 现在,我想让R给出相应乘法过程的最大值,而不是矩阵m3中的和积,例如: 我想得出以下矩阵: 如何做到这一点?

  • 给定N个数字,范围为-100.100。 要求重新排列元素以使产品价值之和最大。此任务中的乘积和定义为a1*a2+a2*a3..an-1*an 例如,给定数字10 20 50 40 30。 1,-2,3,-4,5,-6,7,-8,9,10,11,12,13,14,15,-16 预期的最大乘积为1342。 我的算法给出了下一个重排:

  • 这个问题可能是封闭的,因为它听起来很模糊,但我真的问这个,因为我不知道或者我的数学背景不够。 我试图实现一个挑战,其中一部分挑战要求我计算矩阵的最小值和最大值。我对矩阵的实现及其操作没有任何问题,但是什么是矩阵的最小值和最大值?考虑到3x3矩阵是9个数中最小的数,最大的是最大的还是其他什么?

  • 我检查了用Kadane算法求最大和的连续子数组的解,我不知道为什么我们在代码中需要全局最大值(下面的代码中是global_max)。 下面是用来查找具有最大和的连续子数组的python代码

  • 给定一个数N,我们如何求最大P*Q null 因此,暴力解决方案起作用。 再进一步,我们看到Q_max<=n/2,如果我们确实同意P =√n。 我们可以将我们的解决方案集细化为仅有那些值{P,n\2},其中n\2>=√N。 这可能看起来微不足道,但它只是消除了可能的解决方案集的1/3。 我们是否可以添加其他聪明的程序来进一步减少设置?

  • 本文向大家介绍LCM的最大长度子数组等于C ++中的乘积,包括了LCM的最大长度子数组等于C ++中的乘积的使用技巧和注意事项,需要的朋友参考一下 假设我们有一个数组A。我们必须找到子数组的最大长度,它的LCM与该子数组元素的乘积相同。如果找不到这种子数组,则返回-1。假设数组为{6,10,21},则长度为2,因为在那里有子数组{10,21},其LCM为210,乘积也为210。 该方法是直接的。我