題目連結:
題目意譯:
給定一個索引值從 0 開始的整數陣列 nums,請找到一個索引值從 0 開始的整數陣列 answer,其中:
answer.length == nums.length.
answer[i] = |leftSum[i] - rightSum[i]|。
其中:
leftSum[i] 為陣列 nums 中位於索引值 i 左側的元素之總和。如果不存在這樣子的元素,則 leftSum[i] = 0。
rightSum[i] 為陣列 nums 中位於索引值 i 左側的元素之總和。如果不存在這樣子的元素,則 rightSum[i] = 0。
回傳陣列 answer。
限制:
1 ≦ nums.length ≦ 1000
1 ≦ nums[i] ≦ 10 ^ 5
範例測資:
範例 1:
輸入: nums = [10,4,8,3]
輸出: [15,1,11,22]
解釋: 陣列 leftSum 為 [0,10,14,22] 而陣列 rightSum 為 [15,11,3,0]。
陣列 answer 為 [|0 - 15|,|10 - 11|,|14 - 3|,|22 - 0|] = [15,1,11,22]。
範例 2:
輸入: nums = [1]
輸出: [0]
解釋: 陣列 leftSum 為 [0] 而陣列 rightSum 為 [0]。
陣列 answer 為 [|0 - 0|] = [0]。
解題思維:
雖然可以先算一次 rightSum[0],然後依序得出
leftSum[0] = nums[0]、
rightSum[1] = rightSum[0] - nums[0]、
leftSum[1] = nums[0] + nums[1]、
rightSum[2] = rightSum[1] - nums[1]、
……來計算 answer 各個位置的值。
當然,你也可以直接把 leftSum 和 rightSum 這兩個陣列建出來。
不過因為 nums 的長度很小,所以你也可以直接為每個位置 answer[i] 求出對應的 leftSum[i] 和 rightSum[i] 來求值。三種方式在本題都是可行的。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。