360. Sort Transformed Array - Detailed Explanation
Problem Statement
Given a sorted integer array nums of length n and integer coefficients a, b, c, define a quadratic function
f(x) = a*x^2 + b*x + c
Apply f to each element of nums and return the resulting array in sorted order.
Examples
- Input
 nums = [-4, -2, 2, 4], a = 1, b = 3, c = 5
 Output
 [3, 9, 15, 33]
 Explanation
 f(x) = x² + 3x + 5 → transforms to [9, 3, 15, 33] → sorted → [3, 9, 15, 33]
- Input
 nums = [-4, -2, 2, 4], a = -1, b = 3, c = 5
 Output
 [-23, -5, 1, 7]
 Explanation
 f(x) = -x² + 3x + 5 → transforms to [-23, -5, 1, -7] → sorted → [-23, -5, 1, 7]
- Input
 nums = [0, 1, 2], a = 0, b = 2, c = -1
 Output
 [-1, 1, 3]
 Explanation
 f(x) = 2x − 1 → [−1, 1, 3] is already sorted
Constraints
- n == nums.length
- 1 ≤ n ≤ 10⁵
- -10⁴ ≤ nums[i], a, b, c ≤ 10⁴
- numsis sorted in non‑decreasing order
Brute Force Approach
- Transform & Sort
- Allocate an array resof lengthn.
- For each iin[0, n)computeres[i] = f(nums[i]).
- Sort reswith any O(n log n) sort.
 
- Allocate an array 
- Complexity
- Time O(n log n) for the sort
- Space O(n) for the output array
 
Optimal Two‑Pointer Approach
Because nums is sorted, and f(x) is a parabola opening up if a>0 or down if a<0, the largest (or smallest) transformed values lie at the ends. We can merge from the outside in:
- Setup
- Two pointers left = 0,right = n-1.
- Output array resof lengthn.
- An index idxpointing at either the start (ifa<0) or end (ifa>=0) ofres.
 
- Two pointers 
- Merge Loop
- While left ≤ right:- Compute L = f(nums[left]),R = f(nums[right]).
- If a >= 0: place the larger ofL,Ratres[idx--]; else place the smaller atres[idx++].
- Move the pointer (left++orright--) whose value was used.
 
- Compute 
 
- While 
- Why It Works
- Parabola shape ensures extremes produce the extreme transformed values.
- By filling from one end inward, we maintain sorted order without extra sorting.
 
- Time O(n), Space O(n)
Step‑by‑Step Walkthrough
Take nums = [-4, -2, 2, 4], a = 1, b = 3, c = 5
- f(x) = x² + 3x + 5
- Initialize left=0→-4,right=3→4,idx=3(fill from back)
- L = f(-4)=9, R = f(4)=33 → place 33 at res[3], right→2
- L = 9, R = f(2)=15 → place 15 at res[2], right→1
- L = 9, R = f(-2)=3 → place 9 at res[1], left→1
- Only left=1remains: L=3 → place at res[0]
 Result → [3,9,15,33]
Complexity Analysis
- Time O(n) — single pass with two pointers
- Space O(n) — for output
Python Code
Python3
Python3
. . . .
Java Code
Java
Java
. . . .
Edge Cases
- a = 0 → f(x) is linear → transformed array remains monotonic, can fill directly.
- n = 1 → just return [f(nums[0])].
- All nums equal → every f(nums[i]) same; both pointers equivalent.
Common Mistakes
- Forgetting to handle a < 0separately (fills from front instead of back).
- Off‑by‑one errors when updating idx.
- Re‑sorting the result after two‑pointer merge (defeats the purpose).
Related Problems
TAGS
leetcode
CONTRIBUTOR
Design Gurus Team
-
GET YOUR FREE
Coding Questions Catalog
Boost your coding skills with our essential coding questions catalog.
Take a step towards a better tech career now!
Explore Answers
684. Redundant Connection - Detailed Explanation
Learn to solve Leetcode 684. Redundant Connection with multiple approaches.
829. Consecutive Numbers Sum - Detailed Explanation
Learn to solve Leetcode 829. Consecutive Numbers Sum with multiple approaches.
468. Validate IP Address - Detailed Explanation
Learn to solve Leetcode 468. Validate IP Address with multiple approaches.
1101. The Earliest Moment When Everyone Become Friends - Detailed Explanation
Learn to solve Leetcode 1101. The Earliest Moment When Everyone Become Friends with multiple approaches.
463. Island Perimeter - Detailed Explanation
Learn to solve Leetcode 463. Island Perimeter with multiple approaches.
658. Find K Closest Elements - Detailed Explanation
Learn to solve Leetcode 658. Find K Closest Elements with multiple approaches.
Related Courses
Grokking the Coding Interview: Patterns for Coding Questions
Grokking the Coding Interview Patterns in Java, Python, JS, C++, C#, and Go. The most comprehensive course with 476 Lessons.
4.6
(69,299 learners)
$197
New

Grokking Modern AI Fundamentals
Master the fundamentals of AI today to lead the tech revolution of tomorrow.
3.9
(1,107 learners)
$78
Grokking Data Structures & Algorithms for Coding Interviews
Unlock Coding Interview Success: Dive Deep into Data Structures and Algorithms.
4
(26,683 learners)
$78
One-Stop Portal For Tech Interviews.
Copyright © 2025 Design Gurus, LLC. All rights reserved.