1685. Sum of Absolute Differences in a Sorted Array


T: O(n)
S: O(n)
```java
class Solution {
    public int[] getSumAbsoluteDifferences(int[] nums) {
        int n = nums.length;
        int[] prefixSum = new int[n+1];
        for (int i = 0; i < n; i++) {
            prefixSum[i+1] = nums[i] + prefixSum[i];
        }
        int[] result = new int[n];
        for (int i = 0; i < n; i++) {
            result[i] = i*nums[i] - (prefixSum[i]) + (prefixSum[n] - prefixSum[i])  - (n-i)*(nums[i]);
        }
        return result;
    }
}

/*
T: O(n)
S: O(n)

[2,3,5]

result[i] = nums[i] - nums[0] + nums[i] - nums[1] + ... nums[i] - nums[i-1]
nums[i] - nums[i] + nums[i+1] - nums[i] + nums[i+2] -nums[i] + ... + nums[n-1] - nums[i]


nums[0] + nums[1] + ... + nums[i-1] -> prefix[i] - prefix[0] -> prefix[0] is 0, so = prefix[i]


-> nums[i] + nums[i+1]  + nums[i+2]  + ... + nums[n-1]  => (prefixSum[n] - prefixSum[i])
because there are i, i+1...n-1, 個數, 所以像是start from 0 index to n-1, so n-1-i+1 = n-i 個元素

i*nums[i] - (nums[0]+....nums[i-1])
(nums[i] + .... nums[n-1])- (n-i)*(nums[i])   // n-1-i-1 + 1 = n-i-1

i*nums[i] - (prefix[i])
+ (prefix[n] - prefix[i])  - (n-i)*(nums[i]) 

*/
```

另一種觀察

2121 也可以做一下

Last updated

Was this helpful?