操作思路和LeetCode第 26 题:删除排序数组中的重复项(C++)_zj-优快云博客很像,只不过赋值改为交换:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int start = 0;//指向元素0
for(int i = 0; i < nums.size(); ++i){
if(nums[i] != 0) swap(nums[start++], nums[i]);
}
}
};
稍作优化:
class Solution {
public:
void moveZeroes(vector<int>& nums) {
int start = 0;//指向元素0
for(int i = 0; i < nums.size(); ++i){
if(nums[i] != 0){
if(i != start || nums[start] != nums[i])//有时没必要交换
swap(nums[start], nums[i]);
++start;
}
}
}
};
不过使用赋值也是可以的,只是效率不如交换。具体可以看: