Leetcode Hot 100 Problems —— 移動零
阿新 • • 發佈:2022-03-28
移動零
問題描述:
給一個數組,將所有0移動到陣列末尾,保持其餘元素位置不變。
空間複雜度只能為O(n)即不能使用輔助陣列。
解法:
使用非同步雙指標,前指標指向前序全非零的最後一個元素的後一位,後指標指向前指標後第一個非零元。
每次將將後指標的值覆蓋到前指標當前位置,前指標後移一位,後指標移動到下一個非零元。
當後指標越界後,前指標從當前位置移動到陣列末尾,沿途所有位置補零。
程式碼描述如下:
#include <iostream> using namespace std; void movezero(int nums[],int numsSize){ if(nums == NULL || numsSize == 0) return; int j=0; for(int i=0;i<numsSize;i++){ if(nums[i]!=0) nums[j++] = nums[i]; } for(int i=j;i<numsSize;i++) nums[i] = 0; }
改進的解法
void movezero_1(int nums[], int numsSize){ if(nums == NULL || numsSize == 0) return; int j=0; for(int i=0;i<numsSize;i++){ if(nums[i] != 0){ if(i != j){ nums[j] = nums[i]; nums[i] = 0; } j++; } } }