1.题目:
给定一个按非递减顺序排序的整数数组 A,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 :
输入:[-4,-1,0,3,10]
输出:[0,1,9,16,100]
2.代码:
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int* sortedSquares(int* A, int ASize, int* returnSize) {
*returnSize=ASize;
int i=0,j=ASize-1,k=ASize-1;
int *r=(int *)malloc(sizeof(int )*ASize);
while(i<j){
int x=A[i]*A[i];
int y=A[j]*A[j];
if(x>=y){
r[k--]=x;
i++;
}
else{
r[k--]=y;
j--;
}
}
r[k]=A[i]*A[i];
return r;
}
/**
* Return an array of size *returnSize.
* Note: The returned array must be malloced, assume caller calls free().
*/
int compare(const void* a,const void* b){
return *(int* )a-*(int* )b;
}
int* sortedSquares(int* A, int ASize, int* returnSize) {
*returnSize=ASize;
for(int i=0;i<ASize;i++)
A[i]=A[i]*A[i];
qsort(A,ASize,sizeof(int ),compare);
return A;
}
3.知识点:
双指针