使用Python查找已排序子数组和的范围总和的程序
假设我们有一个具有n个正元素的数组nums。如果计算nums的所有非空连续的子数组和,然后以不递减的方式对它们进行排序,通过创建一个新数组n*(n+1)/2个数字。我们必须找到新数组的左索引和右索引(指定为1为起始索引)之间数字的总和。答案可能非常大,因此返回结果模除10^9+7。
因此,如果输入如下nums = [1,5,2,6],left = 1,right = 5,那么输出将是20,因为这里的所有子数组和是1、5、2、6、6、7、8、8、13、14,因此在排序后,它们是[1,2,5,6,6,7,8,8,13,14],从索引1到5的元素的总和为1+5+2+6+6 = 20。
为了解决这个问题,我们将遵循以下步骤:
- m := 10^9 + 7
-
n := nums的大小
-
a := 一个新的列表
-
循环0到n – 1的i,执行以下操作–
- 循环i到n – 1的j,执行以下操作–
- 如果i等于j,则
-
在a的末尾插入nums[j]
-
否则,
-
在a的末尾插入((nums[j] + a的最后一个元素) mod m)
- 循环i到n – 1的j,执行以下操作–
-
对列表a进行排序
-
sm := a中所有元素之和(从索引left-1到right)
-
返回sm mod m
让我们看以下实现以获得更好的理解-
更多Python相关文章,请阅读:Python 教程