模版题-数组专题-前缀和解决区间和问题

管理员
**前缀和**的思想:重复利用计算过的子数组之和,从而降低区间查询需要累加计算的次数。 **前缀和在涉及计算区间和的问题时非常实用。** 特别注意: 在使用前缀和求解的时候,要特别注意 求解区间。 如果要求区间下标[2, 5]的区间和,那么应该是 prefix_sum[5] - prefix_sum[1],而不是 prefix_sum[5] - prefix_sum[2]。 输入示例 ``` 5 1 2 3 4 5 0 1 1 3 第一行输入为整数数组 Array 的长度 n, 接下来 n 行,每行一个整数,表示数组的元素。 随后的输入为需要计算总和的区间下标:a,b (b > = a),直至文件结束。 ``` **代码** ```python import sys input = sys.stdin.read def main(): # 读取所有 空白字符进行分割 data = input().split() index = 0 n = int( data[ index ] ) index += 1 vec = [] for i in range( n ): vec.append(int(data[ index + i ])) index += n # 前缀和 p = [ 0 ] * n p[ 0 ] = vec[ 0 ] for i in range( 1, n ): p[ i ] = p[ i - 1 ] + vec[ i ] # 查询区间和 while index < len( data ): a = int( data[ index ] ) b = int( data[ index + 1] ) index += 2 if a == 0: sum_value = p[ b ] else: sum_value = p[ b ] - p[ a - 1 ] print( sum_value ) if __name__ == "__main__": main() ``` `split()`方法补充: ``` 不传任何参数时会按以下规则分割 - 分割符:任意空白字符,包括: 空格 ' ' 换行符 '\n' 制表符 '\t' 回车符 '\r' 换页符 '\f' 垂直制表符 '\v' - 连续空白:多个连续的空白字符会被当作一个分隔符处理 - 自动去除首尾空白:字符串开头和结尾的空白会被忽略 ```
评论 0

发表评论 取消回复

Shift+Enter 换行  ·  Enter 发送
还没有评论,来发表第一条吧