连续子数组和的整除问题
问题:
求数组中的连续子数组的和能乘除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
浙公网安备 33010602011771号