题目描述
解题分析
- 题中要求在原来的数组上
- 使用快慢指针,慢指针之前得都为排序结束的数字,快指针进行遍历
- 慢指针遇到0就停止,快指针遇到非零判断是否和慢指针相同,不同就交换
- 保证快指针不慢于慢指针
代码
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int size = nums.size();
int slow = 0;
int fast = 0;
while(fast<size){
if(fast!=slow){
if(nums[slow] == 0 && nums[fast] != 0){
swap(nums[slow],nums[fast]);
}
}
if(nums[fast] == 0){
fast++;
}
if(nums[slow] != 0){
slow++;
if(fast<slow){
fast = slow;
}
}
}
}
};
- 改进:使用慢指针表示完成交换的数组片,一次循环即可
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int size = nums.size();
int cout = 0;
int slow = 0;
for(int i=0;i<size;i++){
if(i!=slow){
swap (nums[i],nums[slow]);
}
if(nums[slow]!=0){
slow++;
}
}
}
};
提交结果