前缀和:leetcode2602数组元素全部相等的最少操作次数

2602. 使数组元素全部相等的最少操作次数 - 力扣(LeetCode)

暴力枚举(该方法超时)

这道题最直观的做法

每一轮query中,都直接计算nums[i]和quries[i]的差值之和

class Solution:
    def minOperations(self, nums: List[int], queries: List[int]) -> List[int]:
        res = []
        for q in queries:
            cnt = 0
            for num in nums:
                cnt += abs(q - num)
            res.append(cnt)
        return res

可以看到耗时的地方在于二重循环。因为需要求和,所以在二重循环中运算。看到求和,就要马上想到前缀和,更进一步的,我们应该如何用前缀和加速求解?

前缀和 

上文求差,求的就是图中阴影面积。列式如下

前缀和:leetcode2602数组元素全部相等的最少操作次数_第1张图片

这里有一个易错点,前缀和如果表示的是前i个数的和,那么前缀和数组长度为n+1&#x

你可能感兴趣的:(算法,leetcode,算法,动态规划)