Maximum Subarray Sum

  • + 0 comments
    #
    # Complete the 'maximumSum' function below.
    #
    # The function is expected to return a LONG_INTEGER.
    # The function accepts following parameters:
    #  1. LONG_INTEGER_ARRAY a
    #  2. LONG_INTEGER m
    #
    
    import typing
    
    class A(typing.NamedTuple):
        i: int
        v: int
    
    def maximumSum(a, m):
        psum = 0
        x = []
        for i, v in enumerate(a):
            psum = (psum + v) % m
            x.append(A(i, psum))
        
        x = sorted(x, key=lambda e: e.v)
        # print(x)
        
        mx = x[-1].v
        for (i1, v1), (i2, v2) in zip(x[:-1], x[1:]):
            if (i1 > i2):
                mx = max(mx, v1 - v2 + m)
    
        return mx