乙级的题目训练主要用来熟悉编程语言的语法和形成良好的编码习惯和编码规范。从小白开始逐步掌握用编程解决问题。
问题分析
题设要求按照给定方式截取数组得到所有可能片段,然后求各个片段和的总和。
截取片段的方式是, 截取任意连续的几个数即可, 也就是取连续子数组。
截取片段并求和的方法
最直接的方案是按照题设要求, 设置片段长度从1到N, 然后以每个元素位开头, 截取制定长度的片段.
大致形式如下:
total_sum = 0
for slice_length in range(1, length(input)):
for index in range(0, length(input) - slice_length):
slice = input[index: index+slice_length]
total_sum += sum(slice)
这里用到了两层循环, 然后截取数组片段也是一个隐形的循环。可能会导致程序超时。
先不论是否超时, 我们尝试优化程序性能, 寻找操作更少的计算方案。
寻找每一个元素被累加次数的规律
以题目样例的"0.1 0.2 0.3 0.4"为例, 得到的片段为:
(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2)
(0.2, 0.3) (0.2, 0.3, 0.4)
(0.3)