栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

任意数组下标L~R范围的累加和(两种Python实现方法)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

任意数组下标L~R范围的累加和(两种Python实现方法)

第一种可以考虑将任意L到R的累加结果映射成为一个二维数组,再通过对二维数组的直接查询可以访问到任意数组下标的范围累加和(L <= R),具体Python代码实现如下:
arr = [3,4,2,1,6,7,8]

# 如果总是频繁查询L到R的累加和,怎么办?
# 第一种方法:建立以L和R为边的二维数组
#     0 1 2 3 4 5 6
#  0
#  1
#  2
#  3
#  4
#  5
#  6
def GetRangeSum1(arr,L,R):
    arrNew = [['X'] * len(arr) for i in range(len(arr))]
    for i in range(0,len(arr),1):
        for j in range(i,len(arr),1):
            start = i
            end = j
            arrNew[i][j] = 0
            while start <= end:
                arrNew[i][j] += arr[start]
                start += 1

    print('生成二维数组如下:')
    for i in range(0,len(arr),1):
        for j in range(0,len(arr),1):
            print(arrNew[i][j],end='t')
        print('')

    print(f'{L}到{R}范围内的加和为{arrNew[L][R]}')

        GetRangeSum1(arr,2,5)

        print('==================================================')

执行结果如下:

生成二维数组如下:
3    7    9    10    16    23    31    
X    4    6    7    13    20    28    
X    X    2    3    9    16    24    
X    X    X    1    7    14    22    
X    X    X    X    6    13    21    
X    X    X    X    X    7    15    
X    X    X    X    X    X    8    
2到5范围内的加和为16
==================================================

第二种可以采用前缀和的方法,具体Python代码如下:

# 第二种方法  前缀和
# help = [3,7,9,10,16,23,31]
# L == 0  ans = H[R]
# L != 0 H[R] - H[L-1]
def GetRangeSum2(arr,L,R):
    arrNew = [0 for i in range(len(arr))]
    i = 1
    arrNew[0] = arr[0]
    while i < len(arr):
        preValue = arrNew[i-1]
        arrNew[i] = preValue + arr[i]
        i += 1
    print('生成的前缀和一维数组如下:')
    print(arrNew)
    if L == 0:
        print(f'{L}到{R}的范围和为{arrNew[R]}')
    else:
        print(f'{L}到{R}的范围和为{arrNew[R] - arrNew[L-1]}')

GetRangeSum2(arr,1,4)

执行结果如下:

生成的前缀和一维数组如下:
[3, 7, 9, 10, 16, 23, 31]
1到4的范围和为13

两种方法比较:若重复次数特别多,法1更合适,其他多数情况,2较为合适

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002318.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号