Skip to main content
Back to problems
#360
Medium Algorithms

Sort transformed array

Array Math Two Pointers Sorting
58.1% acceptance
Mar 31, 2026
705
220

No description available.

Solution

Rust
Time O(n)
Space O(n)
LeetCode
solution.rs
impl Solution {
  pub fn sort_transformed_array(nums: Vec<i32>, a: i32, b: i32, c: i32) -> Vec<i32> {
    let n = nums.len();
    let f = |x: i32| -> i32 { a * x * x + b * x + c };
    let mut result = vec![0; n];
    let mut left = 0usize;
    let mut right = n.wrapping_sub(1);
    let mut idx: usize;
    if a >= 0 {
      idx = n - 1;
      while left <= right && right < n {
        let fl = f(nums[left]);
        let fr = f(nums[right]);
        if fl >= fr {
          result[idx] = fl;
          left += 1;
        } else {
          result[idx] = fr;
          right = right.wrapping_sub(1);
        }
        idx = idx.wrapping_sub(1);
      }
    } else {
      idx = 0;
      while left <= right && right < n {
        let fl = f(nums[left]);
        let fr = f(nums[right]);
        if fl <= fr {
          result[idx] = fl;
          left += 1;
        } else {
          result[idx] = fr;
          right = right.wrapping_sub(1);
        }
        idx += 1;
      }
    }
    result
  }
}