题目给定一个非递减序列的数组,要求我们平方之后也返回一个非递减数列的数组,很简单,平方数一定是从左右到中间依次递减的,我们只需要设置两个指针 head 和 tail ,一个指向最左边一个指向最右边,然后比较两者平方大小,如果head指向的数大,则head++,反之,tail,然后将比较大的数据存入一个数组,当然这个数组的下标是从后往前递减的,最后head == tail时循环结束,返回新建的那个数组即可。
代码如下:
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int* sortedSquares(int* nums, int numsSize, int* returnSize) {
int head = 0;
int tail = numsSize-1;
int* returnNums = (int*)malloc(sizeof(int)*numsSize);
int k = numsSize-1;
while(head<=tail){
if(nums[head]*nums[head] > nums[tail]*nums[tail]){
returnNums[k--] = nums[head]*nums[head];
head++;
}
else{
returnNums[k--] = nums[tail]*nums[tail];
tail--;
}
}
*returnSize = numsSize;
return returnNums;
}