Skip to content

360. Sort Transformed Array

Problem:

Given a sorted array of integers nums and integer values a, b and c. Apply a function of the form f(x) = ax^2 + bx + c to each element x in the array.

The returned array must be in sorted order.

Expected time complexity: O(n)

Example: nums = [-4, -2, 2, 4], a = 1, b = 3, c = 5,

Result: [3, 9, 15, 33]

nums = [-4, -2, 2, 4], a = -1, b = 3, c = 5

Result: [-23, -5, 1, 7]

Solutions:

public class Solution {
    public int[] sortTransformedArray(int[] nums, int a, int b, int c) {
        int[] result = new int[nums.length];
        int left = 0, right = result.length - 1;
        for (int i = 0; i < result.length; i ++) {
            if (a > 0) {
                int leftp = a * nums[left] * nums[left] + b * nums[left] + c;
                int rightp = a * nums[right] * nums[right] + b * nums[right] + c;
                if (leftp > rightp) {
                    result[result.length - 1 - i] = leftp;
                    left ++;
                }
                else {
                    result[result.length - 1 - i] = rightp;
                    right --;
                }

            }
            else {
                int leftp = a * nums[left] * nums[left] + b * nums[left] + c;
                int rightp = a * nums[right] * nums[right] + b * nums[right] + c;
                if (leftp < rightp) {
                    result[i] = leftp;
                    left ++;
                }
                else {
                    result[i] = rightp;
                    right --;
                }
            }
        }
        return result;
    }
}