难度简单
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
思路一:
两个指针,一个寻找 0 元素,一个寻找当前 0 元素后的第一个非 0 元素
void moveZeroes(vector<int>& nums) {
int cur=0,target=0,len=nums.size();
while(target<len){
while(cur<len && nums[cur]) ++cur;
target=cur+1;
while(target<len && !nums[target]) ++target;
if(cur>=len || target>=len) return;
else if(!nums[cur]) swap(nums[cur],nums[target]);
}
}
思路二:
两个指针,一个指向已经排序完成的后一个元素,一个寻找非 0 元素
若当前寻找的数据非 0 ,将该数据与排序完成后的第一个数据交换。
void moveZeroes(vector<int>& nums) {
int cur=0,target=0,len=nums.size();
while(target<len){
if(nums[target]){
swap(nums[cur],nums[target]);
++cur;
}
++target;
}
}