2022年5月2日 星期一

[905] Sort Array By Parity

於是我怎麼又開始寫了呢XD 已經又瞬間忘光了pointer, 感覺可以算算去啊~(痛哭)
總之這題就是說input 一個array, 把偶數都擺前面, 奇數擺後面, 順序不限~
於是就簡單的橫出一個新array, 然後邊讀邊左邊丟右邊丟, 各用一個index 加加跟減減啊覺得世界美好!但我想它應該有一個可以用原本input 做出來的方法吧.....?! (thinking 圖) 
總之先來個簡單版



/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int* sortArrayByParity(int* nums, int numsSize, int* returnSize){
    *returnSize = numsSize;
    if (numsSize <= 1)
        return nums;
    int i;
    int left = 0;
    int right = numsSize -1;
    int *retArray = (int *) malloc(sizeof(int) * numsSize);
    for (i=0;i<numsSize;i++)
    {
        if (nums[i]%2==0)
            retArray[left++]=nums[i];
        else
            retArray[right--]=nums[i];
    }
    return retArray;   
    
}

下面是因為忘記swap 怎麼寫了, 留存XD


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
void swap(int *a, int *b)
{
    int tmp;
    tmp = *a;    
    *a = *b;
    *b = tmp;    
}

int* sortArrayByParity(int* nums, int numsSize, int* returnSize){
    *returnSize = numsSize;
    if (numsSize <= 1)
        return nums;
    int i, left, right;

    for (left=0,right = numsSize -1; left<right;left++, right--)
    {
        for(i=left; i< right; i++)
        {
            if (nums[i]%2==0)
                left++;
            else
                break;
        }
        for(i=right; left< right; i--)
        {
            if (nums[i]%2!=0)
                right--;
            else
                break;
        }
        swap(&nums[left],&nums[right]);        
    }
    return nums;   
    
}

沒有留言:

張貼留言