直接贴一下代码:
记两个自己没想到的点:
1、可以不实现绝对值的函数,比两个数的平方。
2、一开始自己的想法是往结果数组里从0往后填数,先找到从左往右第一个大于0的数,和从右往左第一个小于0的数,这样比较麻烦。
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
// 这道题,我一开始没想到直接从两端开始往里比
// 想先找到中间第一个
int* sortedSquares(int* nums, int numsSize, int* returnSize){
*returnSize = numsSize;
int left = 0;
int right = numsSize-1;
int index = numsSize-1;
int* ans = (int*)malloc(sizeof(int) * numsSize);
// [left,right]
while(left<=right){
if(nums[right]*nums[right] >= nums[left]*nums[left]){
ans[index] = nums[right]*nums[right];
right--;
index--;
}
else{
ans[index] = nums[left]*nums[left];
left++;
index--;
}
}
return ans;
}
class Solution:
def sortedSquares(self, nums: List[int]) -> List[int]:
n = len(nums)
i,j,k = 0,n - 1,n - 1
ans = [-1] * n
while i <= j:
lm = nums[i] ** 2
rm = nums[j] ** 2
if lm > rm:
ans[k] = lm
i += 1
else:
ans[k] = rm
j -= 1
k -= 1
return ans