原题网址:https://leetcode.com/problems/sort-transformed-array/
Given a sorted array of integers nums and integer values a, b and c. Apply a 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]
方法:根据a、b的符号决定函数增减特性处理。
public class Solution {
public int[] sortTransformedArray(int[] nums, int a, int b, int c) {
int[] f = new int[nums.length];
if (a>0) {
for(int i=0, j=nums.length-1, k=f.length-1; k>=0; k--) {
int fi = nums[i] * nums[i] * a + nums[i] * b + c;
int fj = nums[j] * nums[j] * a + nums[j] * b + c;
if (fi>=fj) {
f[k] = fi;
i++;
} else {
f[k] = fj;
j--;
}
}
} else if (a<0) {
for(int i=0, j=nums.length-1, k=0; k<f.length; k++) {
int fi = nums[i] * nums[i] * a + nums[i] * b + c;
int fj = nums[j] * nums[j] * a + nums[j] * b + c;
if (fi<=fj) {
f[k] = fi;
i++;
} else {
f[k] = fj;
j--;
}
}
} else if (b>0) {
for(int i=0; i<f.length; i++) {
f[i] = nums[i] * b + c;
}
} else if (b<0) {
for(int i=0, j=f.length-1; j<f.length; i--) {
f[i] = nums[j] * b + c;
}
} else {
// b==0
for(int i=0; i<f.length; i++) f[i] = c;
}
return f;
}
}