My code:
public class Solution {
private int a = 0;
private int b = 0;
private int c = 0;
public int[] sortTransformedArray(int[] nums, int a, int b, int c) {
if (nums == null || nums.length == 0) {
return null;
}
this.a = a;
this.b = b;
this.c = c;
int n = nums.length;
int[] ret = new int[n];
int begin = 0;
int end = nums.length - 1;
int k = (a >= 0 ? ret.length - 1 : 0);
while (begin <= end) {
if (a >= 0) {
ret[k--] = (t(nums[begin]) >= t(nums[end]) ? t(nums[begin++]) : t(nums[end--]));
}
else {
ret[k++] = (t(nums[begin]) <= t(nums[end]) ? t(nums[begin++]) : t(nums[end--]));
}
}
return ret;
}
private int t(intnum) {
return this.a * num * num + this.b * num + this.c;
}
}
浪费了好多时间做这道题目。。。
结果还是没做出来,再做十分钟应该可以做出来,但是代码已经写了一百多行了,做出来也没有意义了。
我也看出了是函数的问题,但感觉要分好多类型,
a>0,<0,=0
if a == 0: b>0,<0
-b/2a ,作为分割线, nums 可以全部在左边,也可以全部在右边,又可以都在。再配上 a>0,<0,感觉情况特别多。
但是看了答案的解法,发现真的很简单。
reference:
https://discuss.leetcode.com/topic/48424/java-o-n-incredibly-short-yet-easy-to-understand-ac-solution/2
我们永远只要首尾进行比较,适用于任何情况。
看代码具体体会吧。
Anyway, Good luck, Richardo! -- 09/05/2016