283. Move Zeroes的C++解法

来源:互联网 发布:sons of day 知乎 编辑:程序博客网 时间:2024/06/09 23:59

本题要求不使用更多的空间并使操作数最少。我的思路是i代表遍历整个vector的下标,j代表已经交换到了哪个位置。把nums[j]换到nums[i]处,剩下的全部补0就行了。

class Solution {public:void moveZeroes(vector<int>& nums) {int j = 0;for (int i = 0; i < nums.size(); i++){if (nums[i] != 0){nums[j] = nums[i];j++;}}for (j; j < nums.size(); j++) nums[j] = 0;}};

操作数更少的算法:

void moveZeroes(vector<int>& nums) {    int last = 0, cur = 0;        while(cur < nums.size()) {        if(nums[cur] != 0) {            swap(nums[last], nums[cur]);            last++;        }                cur++;    }}

last停留在0处直到被换走为止,相当于一点一点把0往后挪。比我写的更简单。

0 0