carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode2574: Left and Right Sum Differences #422

Open carloscn opened 1 year ago

carloscn commented 1 year ago

Description

Given a 0-indexed integer array nums, find a 0-indexed integer array answer where:

answer.length == nums.length. answer[i] = |leftSum[i] - rightSum[i]|. Where:

leftSum[i] is the sum of elements to the left of the index i in the array nums. If there is no such element, leftSum[i] = 0. rightSum[i] is the sum of elements to the right of the index i in the array nums. If there is no such element, rightSum[i] = 0. Return the array answer.

Example 1:

Input: nums = [10,4,8,3] Output: [15,1,11,22] Explanation: The array leftSum is [0,10,14,22] and the array rightSum is [15,11,3,0]. The array answer is [|0 - 15|,|10 - 11|,|14 - 3|,|22 - 0|] = [15,1,11,22].

Example 2:

Input: nums = [1] Output: [0] Explanation: The array leftSum is [0] and the array rightSum is [0]. The array answer is [|0 - 0|] = [0].

Constraints:

1 <= nums.length <= 1000 1 <= nums[i] <= 105

carloscn commented 1 year ago

Analysis

int32_t left_right_difference(int32_t *nums, size_t nums_size)
{
    int32_t ret = 0;
    int32_t *left_nums = NULL, *right_nums = NULL;

    UTILS_CHECK_PTR(nums);
    UTILS_CHECK_LEN(nums_size);

    left_nums = (int32_t *)calloc(nums_size, sizeof(int32_t));
    UTILS_CHECK_PTR(left_nums);

    right_nums = (int32_t *)calloc(nums_size, sizeof(int32_t));
    UTILS_CHECK_PTR(right_nums);

    for (size_t i = 0; i < nums_size; i ++) {
        int32_t e = 0;
        for (size_t j = 0; j < i; j ++) {
            e += nums[j];
        }
        left_nums[i] = e;

        e = 0;
        for (size_t j = i + 1; j < nums_size; j ++) {
            e += nums[j];
        }

        right_nums[i] = e;
    }

    for (size_t i = 0; i < nums_size; i ++) {
        nums[i] = utils_int32_abs(left_nums[i] - right_nums[i]);
    }

finish:
    UTILS_SAFE_FREE(left_nums);
    UTILS_SAFE_FREE(right_nums);
    return ret;
}
carloscn commented 1 year ago

Code

https://review.gerrithub.io/c/carloscn/structstudy/+/1172190 https://github.com/carloscn/structstudy/commit/4fd8133a89bf26a7f2f9e95a48f8104a6f503a00