python数组部分求和_Python3按指定数组坐标index求和

Input:

arr -- list of int, for example [0,1,2,3,4,5]

summary_index --list of index range, for example[(0,2),(3,4),(0,5)]

Output:

result -- list of sum of arr of the index range in summary_index, for example[3, 7,15]

传统写法:只需要一条sum函数结合列表就能完成优点:代码简洁,只需要一行

缺点:算法复杂是O(n2) (说明:python自带的sum()函数实现就有for循环)

>>> arr=[0,1,2,3,4,5]

>>> summary_index=[(0,2),(3,4),(0,5)]

>>> result=[sum(arr[item[0]: item[1]+1]) for item in summary_index]

>>> print(result)

[3, 7, 15]

进阶写法:降低算法复杂度,大思路只能是空间换时间优点:算法复杂度降到O(n)

缺点:无,多写点代码又算什么呢?

思路:

1) 先生成一个数组arr_sum,元素是arr前n项的和(n<=len(arr))

2) arr数组x到y的和,如果x等于0,和等于arr_sum[y];如果x大于0,和等于arr_sum[y]-arr_sum[x-1]

>>> arr=[0,1,2,3,4,5]

>>> summary_index=[(0,2),(3,4),(0,5)]

>>> for i,value in enumerate(arr):

... sum=value if i==0 else arr_sum[i-1]+value

... arr_sum.append(sum)

...

>>> print(arr_sum)

[0, 1, 3, 6, 10, 15]

>>> result2=[]

>>> for item_sum in summary_index:

... value=arr_sum[item_sum[1]]-arr_sum[item_sum[0]-1] if item_sum[0]>0 else arr_sum[item_sum[1]]

... result2.append(value)

...

>>> print(result2)

[3, 7, 15]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值