题目描述
给你一个按 非递减顺序 排序的整数数组 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]
代码
c
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
#define square(num) ((num) * (num))
int* sortedSquares(int* nums, int numsSize, int* returnSize){
int left = 0;
int right = numsSize - 1;
int index = numsSize - 1; // 从后往前填充
*returnSize = numsSize;
int *retNums = (int *) malloc(numsSize * sizeof(int));
while (left < right) {
int lSquare = square(nums[left]);
int rSquare = square(nums[right]);
if (lSquare >= rSquare) {
retNums[index] = lSquare;
left++;
} else {
retNums[index] = rSquare;
right--;
}
index--;
}
retNums[index] = square(nums[left]);
return retNums;
}
go
func sortedSquares(nums []int) []int {
n := len(nums)
l := 0
r := n - 1
i := n - 1
ans := make([]int, n, n)
lSquare := nums[l] * nums[l]
rSquare := nums[r] * nums[r]
for l < r {
if lSquare > rSquare {
ans[i] = lSquare
l++
lSquare = nums[l] * nums[l]
} else {
ans[i] = rSquare
r--
rSquare = nums[r] * nums[r]
}
i--
}
// l == r
ans[i] = nums[l] * nums[l]
return ans
}