直覺寫起來沒啥問題~因為時間晚了對於optimize 有點腦空XD
是以看了解答,原來要用兩根pointer~~~~
應該在白天頭腦清醒的時後可以想到吧XD
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int comp(const void *a, const void *b)
{
return (*(int*)a - *(int*)b);
}
int* sortedSquares(int* nums, int numsSize, int* returnSize){
for (int i=0;i<numsSize; i++)
nums[i]=nums[i]*nums[i];
*returnSize = numsSize;
qsort((void*)nums,numsSize,sizeof(int),comp);
return nums;
}
Two pointer的版本:
雖然我沒有喜歡這麼魔性的寫法XD
但是少掉很多行感覺好像很厲害 lol
int* sortedSquares(int* nums, int numsSize, int* returnSize){
int l=0,r=numsSize-1;
int* output=calloc (numsSize, sizeof(int));
*returnSize =numsSize;
for (int k=numsSize-1;k>=0 ; k--)
if (abs(nums[l])> abs(nums[r]))
output[k] = nums[l]*nums[l++];
else
output[k]=nums[r]*nums[r--];
return output;
}
沒有留言:
張貼留言