日期: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;
}
};
沒有留言:
張貼留言