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
豪 ~~~~~~笨啊~~~~~~~~~~~~~~~(奔入暴雨中)

[20240714 更新]
哦!!!我竟然又感覺到自己的進步了!!!
(雖然一開始錯的地方一模模一樣樣 XD)
寫出了,以前的我,抄別人的那個版本,也就是說,我變成被抄的那個人了嗎姆襪哈哈哈哈哈哈!!!!!

void moveZeroes(int* nums, int numsSize) {
int l=0;
for (int i=0;i<numsSize; i++)
{
if (nums[i]!= 0)
nums[l++]= nums[i];
}
for (int j=l;j<numsSize;j++)
nums[j] = 0;
return;
}

沒有留言:

張貼留言