给定一个一元二次方程式y = ax^2 + bx + c, 一个sorted array X, 将X中所有元素代入方程中,返回sorted的Y
solution: 看a< or > 0,,搞出两边的y们,然后merge
public class Ax2 {
public static void main(String[] args) {
}
// x is sorted array
private static ArrayList<Integer> sorted(int a, int b, int c, int[] x) {
ArrayList<Integer> result = new ArrayList<Integer>();
if (a == 0) {
return result;
}
// the tredence is decresing first then increasing
if (a > 0) {
ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(getFun(a, b, c, x[0]));
int i;
for (i = 1; i < x.length; i++) {
int y = getFun(a, b, c, x[i]);
if (y > list1.get(i - 1)) {
break;
}
list1.add(y);
}
//now the i is the index of first element is larger than previous
ArrayList<Integer> list2 = new ArrayList<Integer>();
for (; i < x.length; i++) {
int y = getFun(a, b, c, x[i]);
list2.add(y);
}
//merge two arraylist
result = mergeList(list1, list2);
} else { //increasing first then decreasing
ArrayList<Integer> list1 = new ArrayList<Integer>();
list1.add(getFun(a, b, c, x[0]));
int i;
for (i = 1; i < x.length; i++) {
int y = getFun(a, b, c, x[i]);
if (y < list1.get(i - 1)) {
break;
}
list1.add(y);
}
//now the i is the index of first element is larger than previous
ArrayList<Integer> list2 = new ArrayList<Integer>();
for (; i < x.length; i++) {
int y = getFun(a, b, c, x[i]);
list2.add(y);
}
//merge two arraylist
result = mergeList(list1, list2);
}
return result;
}
private static int getFun(int a, int b, int c, int num) {
return (int) (a * Math.pow(num, 2) + b * num + c);
}
private static ArrayList<Integer> mergeList(ArrayList<Integer> list1, ArrayList<Integer> list2) {
ArrayList<Integer> result = new ArrayList<Integer>();
if (list1 == null && list2 != null) {
return list2;
} else if (list1 != null && list2 == null) {
return list1;
}
int i = 0;
int j = 0;
while (i < list1.size() && j < list2.size()) {
if (list1.get(i) < list2.get(j)) {
result.add(list1.get(i));
i++;
} else {
result.add(list2.get(j));
j++;
}
}
if (i != list1.size()) {
for (; i < list1.size(); i++) {
result.add(list1.get(i));
}
}
if (j != list2.size()) {
for (; j < list2.size(); j++) {
result.add(list2.get(j));
}
}
return result;
}