有序数组的平方
题目链接
思路
最直观的相信大家都能想到,平个方,排个序,输出就行。
咱来点高级的。想一想,原数组是有序的呀,而且还有负数。说明最大数一定是在数组两端的。我们可以用两个指针分别指向数组两端,然后比较值的大小,大的赋值然后对应指针更新,小的不动等待下次比较。
暴力法
代码如下:
class Solution {
public:
vector<int> sortedSquares(vector<int>& A){
for (int i=0;i<A.size();i++){
A[i] *= A[i];
}
sort(A.begin(), A.end());//注意sort函数默认从大到小。
//sort也能排序其他的类型,像是字符,字符串之类也可以
return A;
}
};
双指针法
代码如下:
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
int k = A.size() - 1;//用于从最大值开始进行赋值。
vector<int> result(A.size(),0);
for(int i=0,j=A.size()-1;i<=j;){//i<=j是因为i=j时代表只剩一个数,无法比较但仍要进行赋值。
if(A[i]*A[i]<A[j]*A[j]){
result[k--] = A[j]*A[j];
j--;
}
else{//else直接包含了i=j时和A[i]=A[j]时的情况。
result[k--] = A[i]*A[i];
i++;
}
}
return result;
}
};
能力有限,如有问题还望指出。