Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 修改的相邻子阵列的和_Algorithm - Fatal编程技术网

Algorithm 修改的相邻子阵列的和

Algorithm 修改的相邻子阵列的和,algorithm,Algorithm,给定一个大小为N的一维数组a,该数组可能同时包含正整数和负整数以及整数K,求具有最大和的连续数字子数组的和,以使所选数组中的任何元素都不大于K。当我们提供Q查询时,该K会发生变化,每个查询都包含一个整数,即K 示例:设N=5和Q=6,数组为[1 2 3 4 5],查询为: 查询1:K=5,则所选子阵列为[1,2,3,4,5]。元素之和=15 查询2:K=4,则选择的子数组为[1,2,3,4]。元素之和=10 查询3:K=3,则选择的子阵列为[1,2,3]。元素之和=6 查询4:k=2,则选择的子

给定一个大小为N的一维数组a,该数组可能同时包含正整数和负整数以及整数K,求具有最大和的连续数字子数组的和,以使所选数组中的任何元素都不大于K。当我们提供Q查询时,该K会发生变化,每个查询都包含一个整数,即K

示例:设N=5和Q=6,数组为[1 2 3 4 5],查询为:

查询1:K=5,则所选子阵列为[1,2,3,4,5]。元素之和=15

查询2:K=4,则选择的子数组为[1,2,3,4]。元素之和=10

查询3:K=3,则选择的子阵列为[1,2,3]。元素之和=6

查询4:k=2,则选择的子数组为[1,2]。元素之和=3

查询5:k=1,则选择的子阵列为[1]。元素之和=1

查询6:k=0,因为数组A中没有元素X,所以X可以线性求解。 以下是步骤:

  • 初始化
    sum=0
    maximum\u sum=0
  • 通过索引1循环到n
    --如果当前索引值小于或等于
    K
    ,则将当前值添加到
    总和中。如果大于此值,则将总和设为0
    --如果当前总和大于
    最大总和
    ,则更新
    最大总和
  • 打印最大和
  • 复杂性O(n)

    熟悉。在计算最大子数组和时,有必要不考虑包含大于K的元素的子数组。因此,在算法的实现中(以Wikipedia的Python代码为例),对于以索引
    I
    结尾的子数组和,其中
    array[I]>K
    ,可以认为是零(如证明其充分必要):


    但是K随每个查询的查询而变化O(N)是不可承受的
    def max_subarray(A):
        max_ending_here = max_so_far = 0
        for x in A:
            if x > K:
                max_ending_here = 0
            else:
                max_ending_here = max(0, max_ending_here + x)
                max_so_far = max(max_so_far, max_ending_here)
        return max_so_far