程序更新Python中给定范围内的元素
假设我们有一个称为nums的数字列表和一个操作列表。在这里,每个运算都有三个字段[L,R,X],这表明我们应将所有从索引L到R(包括索引)的元素加X。我们必须应用所有操作并返回最终列表。
因此,如果输入像nums = [8,4,2,-9,4]运算= [[0,0,3],[1,3,2],[2,3,5]],则输出将是[11,6,9,-2,4],因为初始列表是[8,4,2,-9,4]。
执行第一个操作[0,0,3],列表将为[11,4,2,-9,4]。
执行第一个操作[1、3、2]时,列表将为[11、6、4,-7、4]。
执行第一个操作[2,3,5],列表将为[11,6,9,-2,4]。
为了解决这个问题,我们将遵循以下步骤-
事件:=一个新列表
对于操作中的每个(l,r,inc),执行
在事件结束时插入(l,inc)
在事件结束时插入(r + 1,-inc)
排序列表事件
inc:= 0,ptr:= 0
对于范围从0到nums的i,执行
inc:= inc + events [ptr,1]
点:=点+ 1
而ptr <事件和events [ptr,0]的大小与i相同,
nums [i]:= nums [i] + inc
返回数字
让我们看下面的实现以更好地理解-
示例
class Solution:def solve(self, nums, operations):
events = []
for l, r, inc in operations:
events.append((l, inc))
events.append((r + 1, -inc))
events.sort()
inc = 0
ptr = 0
for i in range(len(nums)):
while ptr < len(events) and events[ptr][0] == i:
inc += events[ptr][1]
ptr += 1
nums[i] += inc
return nums
ob = Solution()nums = [8, 4, 2, -9, 4]
operations = [ [0, 0, 3], [1, 3, 2], [2, 3, 5] ]
print(ob.solve(nums, operations))
输入值
[1,2,3,4,5,6,7,8,9,10], 3
输出结果
[11, 6, 9, -2, 4]
以上是 程序更新Python中给定范围内的元素 的全部内容, 来源链接: utcz.com/z/340853.html