题目描述
知识点
数组,双指针
结果
实现
码前思考
- 典型的双指针题目,一个指针用于遍历数组,一个指针用于记录非0数字的末尾;
代码实现
//遍历一遍就好了,后面直接补0,bye da~
class Solution {
public:
//记录非0的末尾
int pos=0;
void moveZeroes(vector<int>& nums) {
for(int i=0;i<nums.size();i++){
if(nums[i] != 0){
nums[pos] = nums[i];
pos++;
}
}
while(pos!=nums.size()){
nums[pos] = 0;
pos++;
}
}
};
码后反思
- 其实这道题目还好;
- 有一种更简单的方法,可以最小化,操作次数:
void moveZeroes(vector<int>& nums) { for (int lastNonZeroFoundAt = 0, cur = 0; cur < nums.size(); cur++) { if (nums[cur] != 0) { swap(nums[lastNonZeroFoundAt++], nums[cur]); } } }