描述
牛牛刚学会数组不久,他拿到两个数组 a 和 b,询问 b 的哪一段连续子数组之和与数组 a 之和最接近。
如果有多个子数组之和同样接近,输出起始点最靠左的数组。
输入描述:
第一行输入两个正整数 n 和 m ,表示数组 a 和 b 的长度。
第二第三行输入 n 个和 m 个正整数,表示数组中 a 和 b 的值。
输出描述:
输出子数组之和最接近 a 的子数组
示例1
输入:
2 6 30 39 15 29 42 1 44 1
输出:
29 42
代码如下
n, m = map(int, input().split())
nn = list(map(int, input().split()))
mm = list(map(int, input().split()))
sum_nn = sum(nn)
list_sum_mm = []
i = m-1
while i >= 0:
tmp_i_list = []
for j in range(i+1, m+1):
sum = 0
for u in range(i, j):
sum += mm[u]
tmp_i_list.append(abs(sum-sum_nn))
list_sum_mm.append(tmp_i_list)
i -= 1
list_sum_mm.reverse()
list_cha_submin = []
for k in range(len(list_sum_mm)):
list_cha_submin.append(min(list_sum_mm[k]))
ii = list_cha_submin.index(min(list_cha_submin))
jj = list_sum_mm[ii].index(min(list_sum_mm[ii]))
for h in range(ii,ii+jj+1):
print(mm[h], end=' ')