原题网址:https://leetcode.com/problems/squares-of-a-sorted-array/
解题思路:
我的解:毫无疑问的暴力解。。。。
public int[] sortedSquares(int[] A) {
int len = A.length;
int[] B = new int[len];
for(int i = 0; i < len; i++){
B[i] = A[i] * A[i];
}
for(int i = 0; i < len; i++){
for(int j = 1; j < len - i; j++){
if(B[j-1] > B[j]){
int temp;
temp = B[j-1];
B[j-1] = B[j];
B[j] = temp;
}
}
}
return B;
}
最优解:
public int[] sortedSquares(int[] A) {
int n = A.length;
int[] result = new int[n];
int i = 0, j = n - 1;
for (int p = n - 1; p >= 0; p--) {
if (Math.abs(A[i]) > Math.abs(A[j])) {//首先要能够考虑到abs函数
result[p] = A[i] * A[i];
i++;
} else {
result[p] = A[j] * A[j];
j--;
}
}
return result;
}
1.首先要能够考虑到abs函数
public static double abs(double a)
2.最大值一定是从最左或者最右的值产生;
3.分别设置最左最右索引i和j,不断缩小范围。(这个想法实在是高啊,佩服佩服~)