於是我怎麼又開始寫了呢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;
}
沒有留言:
張貼留言