Leetcode每日一题 —— 2574. 左右元素和的差值

力扣 LeetCode 2574. 左右元素和的差值 - 力扣(LeetCode) 2574. 左右元素和的差值 - 给你一个下标从 0 开始的长度为 n 的整数数组 nums。 定义两个数组 leftSum 和 rightSum,其中: * leftSum[i] 是数组 nums 中下标 i 左侧...
Leetcode每日一题 —— 2574. 左右元素和的差值
Leetcode每日一题 —— 2574. 左右元素和的差值
力扣 LeetCode

2574. 左右元素和的差值 - 力扣(LeetCode)

2574. 左右元素和的差值 - 给你一个下标从 0 开始的长度为 n 的整数数组 nums。 定义两个数组 leftSum 和 rightSum,其中: * leftSum[i] 是数组 nums 中下标 i 左侧元素之和。如果不存在对应的元素,leftSum[i] = 0 。 * rightSum[i] 是数组 nums 中下标 i 右侧元素之和。如果不存在对应的元素,rightSum[i] = 0 。 返回长度为 n 数组 answer,其中 answer[i] =...

昨天数位 DP 实在是不太会,就去随便挑了一道中等题做了。

今天这题就很常规了。


思路

其实就是在计算前缀和与后缀和的绝对差。不过额外空间可以只使用结果数组,先在结果数组中生成前缀,然后动态生成后缀并计算结果即可。


代码

class Solution {
public:
    vector<int> leftRightDifference(vector<int>& nums) {
        // 就是在考察前缀后缀,额外空间只需要结果数组
        int n=nums.size();
        vector<int> res(n,0);
        // 先生成前缀
        for(int i=1;i<n;i++){
            res[i]=res[i-1]+nums[i-1];
        }
        // 再根据后缀得到结果
        int rightSum=nums[n-1];
        for(int i=n-2;i>=0;i--){
            res[i]=abs(res[i]-rightSum);
            rightSum+=nums[i];
        }
        return res;
    }
};

1 个帖子 - 1 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文