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++]);
                }
            }
        }
    }
};
posted @ 2026-04-03 12:20  rdcamelot  阅读(7)  评论(0)    收藏  举报