Given a sorted array of integers nums and integer values a, b and c. Apply a quadratic function of the form f(x) = ax2 + 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]
1 public class Solution { 2 public int[] SortTransformedArray(int[] nums, int a, int b, int c) { 3 if (nums == null || nums.Length < 2) return nums; 4 5 var result = new int[nums.Length]; 6 int i = 0, j = nums.Length - 1; 7 int index = a >= 0 ? j : i; 8 9 while (i <= j) 10 { 11 var q1 = Quad(nums[i], a, b, c); 12 var q2 = Quad(nums[j], a, b, c); 13 14 if (a >= 0) 15 { 16 if (q1 >= q2) 17 { 18 i++; 19 result[index--] = q1; 20 } 21 else 22 { 23 j--; 24 result[index--] = q2; 25 } 26 } 27 else 28 { 29 if (q1 <= q2) 30 { 31 i++; 32 result[index++] = q1; 33 } 34 else 35 { 36 j--; 37 result[index++] = q2; 38 } 39 } 40 } 41 42 return result; 43 } 44 45 private int Quad(int x, int a, int b, int c) { 46 return a * x * x + b * x + c; 47 } 48 }
原文地址:https://www.cnblogs.com/liangmou/p/8163711.html
时间: 2024-11-09 05:44:08