【python美团点评】K

2019-08-18  本文已影响0人  阿牛02

题目:序列中任意个连续的元素组成的子序列称为该序列的子串。 现在给你一个序列P和一个整数K,询问元素和是K的倍数的子串的最大长度。比如序列【1,2,3,4,5】,给定的整数K为 5,其中满足条件的子串为{5}、{2,3}、{1,2,3,4}、{1,2,3,4,5},那么答案就为 5,因为最长的子串为{1,2,3,4,5};如果满足条件的子串不存在,就输出 0。 

输入描述:

第一行包含一个整数N, 1 ≤ 𝑁 ≤ 105。

第二行包含 N 个整数𝑝𝑖,𝑝𝑖表示序列P第i个元素的值。0 ≤ 𝑝𝑖 ≤ 105。第三行包含一个整数K,1 ≤ 𝐾 ≤ 105。

输出描述:

输出一个整数ANS,表示答案。

code:

def maxSub(n, nums, k):

    nums = [0] + nums

    mod = [-1] * k

    mod[0] = 0

    #print(mod)

    ans = 0

    for i in range(1, len(nums)):

        nums[i] = nums[i] + nums[i - 1]  # nums[i]为第几个子数组的和

        print(nums[i])

        m = nums[i] % k

        if mod[m] != -1:

            if ans < i - mod[m]:

                ans = i - mod[m]

        else:

            mod[m] = i

    return ans

if __name__ == '__main__':

    n = 5#int(input())

    nums = [1, 2, 3, 4, 5]#list(map(int, input().split()))

    k = 5#int(input())

    print(maxSub(n, nums, k))

程序运行结果为:

5

上一篇下一篇

猜你喜欢

热点阅读