LeetCode HOT100 - 移动零
双指针
原地操作基本就是用交换了
l 指针维护已处理好的序列的末尾(l 之前的就是非零的数字序列)
r 指针表示当前正在处理的元素
如果 r 对应的元素非零,那么和 l 指向的位置交换,为了减少交换的次数,如果 l == r,那么自然是不用交换的
class Solution {
public:
void moveZeroes(vector<int>& a) {
int l = 0;
int n = a.size();
for (int r = 0; r < n; r ++) {
if (a[r]) {
if (r == l) {
l++;
} else {
swap(a[r], a[l++]);
}
}
}
}
};

浙公网安备 33010602011771号