Given a sorted integer array nums and three integers a, b and c, apply a quadratic function of the form f(x) = ax2 + bx + c to each element nums[i] in the array, and return the array in a sorted order.
Example 1:
Input: nums = [-4,-2,2,4], a = 1, b = 3, c = 5
Output: [3,9,15,33]
Example 2:
Input: nums = [-4,-2,2,4], a = -1, b = 3, c = 5
Output: [-23,-5,1,7]
Constraints:
1 <= nums.length <= 200
-100 <= nums[i], a, b, c <= 100
nums is sorted in ascending order.
Follow up: Could you solve it in O(n) time?
Solutions
Solution 1: Math + Two Pointers
By mathematical knowledge, the graph of a quadratic function is a parabola. When \(a \gt 0\), the parabola opens upwards and its vertex is the minimum value; when \(a \lt 0\), the parabola opens downwards and its vertex is the maximum value.
Since the array \(\textit{nums}\) is already sorted, we can use two pointers at both ends of the array. Depending on the sign of \(a\), we decide whether to fill the result array from the beginning or the end with the larger (or smaller) values.
The time complexity is \(O(n)\), and the space complexity is \(O(n)\), where \(n\) is the length of the array \(\textit{nums}\).