Leetcode 360 Solution

This article provides solution to leetcode question 360 (sort-transformed-array)

https://leetcode.com/problems/sort-transformed-array

Solution

class Solution {
public:
    int calc(int a, int b, int c, int x)
    {
        return a * x * x + b * x + c;
    }

    vector<int> sortTransformedArray(vector<int>& nums, int a, int b, int c) {
        int n = nums.size();
        vector<int> res(n);
        int idx = a >= 0 ? n - 1 : 0;
        int l = 0;
        int r = n - 1;

        while (l <= r)
        {
            int left_val = calc(a, b, c, nums[l]);
            int right_val = calc(a, b, c, nums[r]);

            if (a >= 0)
            {
                if (left_val > right_val)
                    res[idx--] = left_val, l++;
                else
                    res[idx--] = right_val, r--;
            }
            else if (a < 0)
            {
                if (left_val <= right_val)
                    res[idx++] = left_val, l++;
                else
                    res[idx++] = right_val, r--;
            }
        }

        return res;
    }
};