给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100]
示例 2:
输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]
提示:
1 <= nums.length <= 104
-104 <= nums[i] <= 104
nums
已按 非递减顺序 排序
思想:设置一个辅助数组,和两个移动指针,从数组前后进行遍历,比较前后两个数平方后的大小,将较大的放在辅助数组的后面。
代码:
int* sortedSquares(int* nums, int numsSize, int* returnSize) {
int *temp =malloc(sizeof(int)*numsSize);
int i=0,j=numsSize-1,k=numsSize-1;
while(i<=j){
if(nums[i]*nums[i]>nums[j]*nums[j]){
temp[k--]=nums[i]*nums[i];
i++;
}else{
temp[k--]=nums[j]*nums[j];
j--;
}
}
*returnSize =numsSize;
//返回数组的大小。returnSize 是一个指向整数的指针
//它被用来返回排序后的平方数组的大小。
return temp;
}
时间复杂度O(n),空间复杂度O(n)