給一個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
豪 ~~~~~~笨啊~~~~~~~~~~~~~~~(奔入暴雨中)
沒有留言:
張貼留言