360. Sort Transformed Array
题目链接:https://leetcode.com/problems...
这是个数学问题,抛物线,我们知道
a > 0: 这时候是个凹函数,两遍的值大于中间,所以从两遍开始哪边的大就把结果放到result的右边
a < 0: 这时候是个凸函数,两遍的值小于中间,所以两遍开始扫哪边的值小就把它放到result的左边
a == 0: 这时候是单调增的函数,用上面任意一种方法都可以。
public class Solution {
public int[] sortTransformedArray(int[] nums, int a, int b, int c) {
int n = nums.length;
// 2 points
int i = 0, j = n - 1;
int k = a > 0 ? n - 1 : 0;
int[] res = new int[n];
while(i <= j) {
int left = getF(nums[i], a, b, c);
int right = getF(nums[j], a, b, c);
if(a > 0) {
if(left > right) {
res[k--] = left; i++;
}
else {
res[k--] = right; j--;
}
}
else {
if(left < right) {
res[k++] = left; i++;
}
else {
res[k++] = right; j--;
}
}
}
return res;
}
private int getF(int x, int a, int b, int c) {
return a * x * x + b * x + c;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。