置頂

GeoGebra 文章目錄

GeoGebra 文章目錄  更新日期:2018/2/8 我將 GeoGebra 相關的文章及檔案連結都整理在這篇裡,之後如果有新的文章也會同時更新這個目錄。上傳到 GeoGebraTube 的檔案,我有試著用 Google Chrome 63.0.3239.13...

熱門文章

2026年6月6日 星期六

LeetCode 解題筆記:2574. Left and Right Sum Differences

作者:王一哲
日期:2026年6月6日


LeetCode 題目連結:2574. Left and Right Sum Differences

解題想法


簡單難度的題目。假設陣列 $nums$ 長度為 $n$,先建立前綴和 $psum$ 及後綴和 $ssum$,為了在計算區間和、取索引值時比較方便,我將 $psum$ 及 $ssum$ 的長度都開成 $n+2$。再建立儲存答案用的陣列 $ans$,長度為 $n$。用一層 for 迴圈掃過 $i = 1$ 到 $i = n$,利用 $psum$ 及 $ssum$ 計算答案存入 $ans$。

Python 程式碼


Runtime: 7 ms, beats 34.68%. Memory: 19.48 MB, beats 57.43%.
class Solution:
    def leftRightDifference(self, nums: List[int]) -> List[int]:
        n = len(nums)
        # 前綴和
        psum = [0] + nums[:] + [0]
        for i in range(1, n+1):
            psum[i] += psum[i-1]
        # 後綴和
        ssum = [0] + nums[:] + [0]
        for i in range(n, 0, -1):
            ssum[i] += ssum[i+1]
        # 用前綴和及後綴和計算答案
        ans = [0]*n
        for i in range(1, n+1):
            ans[i-1] = abs(psum[i] - ssum[i])
        return ans


C++ 程式碼


Runtime: 0 ms, beats 100%. Memory: 15.23 MB, beats 33.33%.
class Solution {
public:
    vector<int> leftRightDifference(vector<int>& nums) {
        int n = (int)nums.size();
        // 前綴和
        vector<int> psum (n+2, 0);
        for(int i=1; i<=n; i++) {
            psum[i] = psum[i-1] + nums[i-1];
        }
        // 後綴和
        vector<int> ssum (n+2, 0);
        for(int i=n; i>0; i--) {
            ssum[i] = ssum[i+1] + nums[i-1];
        }
        // 用前綴和及後綴和計算答案
        vector<int> ans (n, 0);
        for(int i=1; i<=n; i++) {
            ans[i-1] = abs(psum[i] - ssum[i]);
        }
        return ans;
    }
};


沒有留言:

張貼留言