连续子数组和的整除问题

问题:
求数组中的连续子数组的和能乘除k的最大子数组长度。
输入格式:
第一含一个整数\(N\), \(1 ≤ 𝑁 ≤ 10^5\)
第二行包含 \(N\)个整数$p_𝑖 \(,\)p_𝑖$ 表示序列\(P\)\(i\)个元素的值。$0 ≤ 𝑝_𝑖 ≤ 10^5 $。
第三行包含一个整数 \(K\)\(1 ≤ 𝐾 ≤ 10^5\)
样例输入
Input Sample 1
5
1 2 3 4 5
5
Input Sample 2
6
3 1 2 7 7 7
4
样例输出
Output Sample 1
5
Output Sample 2
5

while True:
    try:
        N=raw_input()
        N=int(N)
        num=raw_input()
        num_list=num.split()
        num_list=[int(i) for i in num_list]
        k=int(raw_input())


    except:
        break
    flag=0
    for out in range(N,0,-1):
        if flag==1:
            break
        end=N-out+1
        for start in range(0,end):
            if flag == 1:
                break
            sub_list= num_list[start:out+start]
            num_sum=sum(sub_list)
            if num_sum%k==0:
                print out#,sub_list
                flag=1

系统判定超时

while True:
    try:
        N=raw_input()
        N=int(N)
        num=raw_input()
        num_list=num.split()
        num_list=[int(i) for i in num_list]
        k=int(raw_input())


    except:
        break
    sum_list=[]
    output=0
    for i in range(0,len(num_list)):
        tmp_num=num_list[i]
        if len(sum_list):
            sum_list=[j+tmp_num for j in sum_list]
        sum_list.append(tmp_num)
        for sub_list_len in range(1,len(sum_list)+1):
            sum=sum_list[len(sum_list)-sub_list_len]
            if sum%k==0:
                output=max(output,sub_list_len)

    print output

posted @ 2017-08-31 22:06  机器狗mo  阅读(238)  评论(0)    收藏  举报