给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
来源:力扣(LeetCode)
快速排序
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int
cmp(int *a, int *b)
{
return *a - *b;
}
int
* sortedSquares(int* nums, int numsSize, int* returnSize)
{
int i;
*returnSize = numsSize;
for (i = 0; i < numsSize; i ++)
{
nums[i] = nums[i] * nums[i];
}
qsort (nums, numsSize, sizeof (int), cmp);
return nums;
}
双指针
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int
* sortedSquares(int* nums, int numsSize, int* returnSize)
{
int left = 0;
int right = numsSize - 1;
int i;
int *ans = malloc (sizeof (int) *numsSize);
*returnSize = numsSize;
// 原地修改,平方后两指针比较较大的以逆序排
for (i = numsSize - 1; left <= right; )
{
if (nums[left] * nums[left] > nums[right] * nums[right])
{
ans[i] = nums[left] * nums[left];
left ++;
}
else
{
ans[i] = nums[right] * nums[right];
right --;
}
i --;
}
return ans;
}