2018年2月14日 星期三

[283] Move Zeroes

給一個array
把零都向右堆
非零的向前排列
本來以為跟bubble sort 一樣
做完發現如果第一輪的第一個item還是0,
它就永遠做不到了XD
笨QQ
改採掃到第一個零之後, 就往後找第一個非零, 跟它換

Move Zeroes
swap版:
(奇怪別人怎麼都只要一到三行, 我的卻長這麼醜 囧)
void swap(int *a, int *b){
    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
   
}

void moveZeroes(int* nums, int numsSize) {
    int i, j ;
    int zerocount = 0;

    for (i=0; i<numsSize-1; i++)
    {
        if (nums[i]==0)
        {
            for(j=i+1;j<numsSize;j++)
                if(nums[j]!=0)
                {
                    swap(&nums[i],&nums[j]);
                    break;
                }
        }          
    }
}

抄別人的版本: 囧
void moveZeroes(int* nums, int numsSize) {
    int i, idx=0;
    for(int i = 0; i < numsSize; i++)
    {
        if(nums[i] != 0)
            nums[idx++] = nums[i];
    }
    for(int i = idx; i < numsSize; i++)
        nums[i] = 0;

}
原本怎麼想都不懂Orz 我是不是腦殘 Orz
用另一個index來記錄目前的非零值,
也就是說第一輪掃過去, 把非零的從頭開始填進去
反正最後面只要全部塞零就好
為什麼一開始我看不懂呢T_T
豪 ~~~~~~笨啊~~~~~~~~~~~~~~~(奔入暴雨中)

沒有留言:

張貼留言