2022年11月19日 星期六

[977] Squares of a Sorted Array

直覺寫起來沒啥問題~因為時間晚了對於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;
}

沒有留言:

張貼留言