Skip to content

Latest commit

 

History

History
40 lines (35 loc) · 853 Bytes

File metadata and controls

40 lines (35 loc) · 853 Bytes
  • std::remove 的功能就是把所有不为目标值的元素,覆盖到容器开头,最后返回覆盖结束后一位置的迭代器
class Solution {
 public:
  void moveZeroes(vector<int>& nums) {
    for_each(remove(begin(nums), end(nums), 0), end(nums),
             [](int& x) { x = 0; });
  }
};
  • 过程如下
01034 => 将 134 覆盖到开头 => 13434 => 返回第二个 3 的位置
对返回位置及其之后位置置零 => 13400
  • 解法如下
class Solution {
 public:
  void moveZeroes(vector<int>& nums) {
    int l = 0;
    int cur = 0;
    while (cur < size(nums)) {
      if (nums[cur] == 0) {
        ++cur;
      } else {
        nums[l++] = nums[cur++];
      }
    }
    for (int i = l; i < size(nums); ++i) {
      nums[i] = 0;
    }
  }
};