# 283. Move Zeroes

## 1.問題&#x20;

* 給予一個array nums, 寫一個function可以將所有的0到array的後面&#x20;

![](https://901207480-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGKoChvN9am4__HCIRK%2F-LHwTlnrkPA1jJbFoHQO%2F-LHwUB4-LCYtH-CAWnJk%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-21%20%E4%B8%8B%E5%8D%886.57.10.png?alt=media\&token=ecc24fce-5fae-4af8-8dc5-eb9ea93fe214)

## 2.想法&#x20;

* 第一種想法是掃描整個array, 一碰到0就swap到最後面, 但這種作法的複雜度很高
* 第二種做法是只要一碰到不為0的元素, 就直接assign到陣列前方, 並記錄index

## 3.程式碼

* 第一種做法

```
class Solution {
public:
    void moveZeroes(vector<int>& nums) {
        int index = 0, cnt = 0;
        while (cnt < (nums.size())) {
            if (nums[index] == 0){
                for (int i = index; i < nums.size(); i++) {
                    if (nums[i] == 0) {
                        for (int j = i; j < nums.size() - 1; j++) { 
                            swap(nums, j, j + 1);
                        }   
                    }
                }
            } else {
                index++;
            }
            cnt ++;
        }
    }
private:
    void swap(vector<int>& nums, int num1, int num2) {
        int tmp = nums[num1];
        nums[num1] = nums[num2];
        nums[num2] = tmp;
    }
};
```

* 第二種做法

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

## 4.Performance

* 第一種做法

![](https://901207480-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGKoChvN9am4__HCIRK%2F-LHwTlnrkPA1jJbFoHQO%2F-LHwVvXscSUwvjwyud5h%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-21%20%E4%B8%8B%E5%8D%887.04.40.png?alt=media\&token=5a603f6d-f944-4857-bce7-2b4bec048621)

* 第二種做法

![](https://901207480-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-LGKoChvN9am4__HCIRK%2F-LHwTlnrkPA1jJbFoHQO%2F-LHwW2k8ARKea6K9z4Mb%2F%E8%9E%A2%E5%B9%95%E5%BF%AB%E7%85%A7%202018-07-21%20%E4%B8%8B%E5%8D%887.03.42.png?alt=media\&token=3feff7a4-56a3-408d-9db5-5288e1317fda)
