移动元素
原题在这里:
概述题意:给定数组,在相对顺序不变的情况下将所有0置于数组末尾。
analyse:
1.选用vector的erase和emplace_back配合使用
class Solution { public: void moveZeroes(vector<int> &nums) { int num = 0; for (int i = 0; i < nums.size(); ++i) if (!nums[i]) nums.erase(nums.begin() + i--), num++; while (num--) nums.emplace_back(0); } };
2.双指针一次遍历,一个右指针顺移,一个左指针正常不动,交换后左顺移,交换条件为右指针非0。
效果就是,左指针指定元素一定非0,相当于依序找非0元素前置,则0元素自然就在后面了。
非常妙哇。
class Solution { public: void moveZeroes(vector<int> &nums) { int n = nums.size(), l = 0, r = 0; while (r < n) { if (nums[r]) swap(nums[l++], nums[r]); r++; } } };
【Over】

浙公网安备 33010602011771号