LeetCode 283 Move Zeroes(移动全部的零元素)
2017-07-19 20:23
489 查看
翻译
给定一个数字数组。写一个方法将全部的“0”移动到数组尾部。同一时候保持其余非零元素的相对位置不变。 比如,给定nums = [0, 1, 0, 3, 12],在调用你的函数之后,nums应该变为[1, 3, 12, 0, 0]。 备注: 你必须就地完毕,不得复制该数组。 最小化总共的操作数。
Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements. For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0]. Note: You must do this in-place without making a copy of the array. Minimize the total number of operations.
分析
一開始我还以为是要给非零元素排序呢,后来细致一看仅仅是保持相对位置不变就好了。那就easy非常多了呀。
0 1 0 3 12 (index = 0, current = 0) 1 0 0 3 12 (index = 1, current = 1) 1 0 0 3 12 (index = 1, current = 2) 1 3 0 0 12 (index = 2, current = 3) 1 3 12 0 0 (index = 3, current = 4)
按上面的步骤来,当前的数字是0的话不做操作。非零的话将其与第一个零互换位置。
其核心在于这个第一个零的位置是怎样变化的。即便一開始不是0也没关系,大不了让这个非零数和自己交换位置呗,比方说:
1 2 0 3 12 (index = 0, current = 0) 1 2 0 3 12 (index = 1, current = 1) 1 2 0 3 12 (index = 2, current = 2) 1 2 3 0 12 (index = 3, current = 3) 1 2 3 12 0 (index = 4, current = 4)
翻译成代码就是:
#include <iostream> #include <vector> using namespace std; void moveZeroes(vector<int>& nums) { for (int index = 0, current = 0; current < nums.size(); current++) { if (nums[current] != 0) swap(nums[index++], nums[current]); } } int main() { vector<int> v; v.push_back(1); v.push_back(2); v.push_back(0); v.push_back(3); v.push_back(12); moveZeroes(v); for (auto i : v) { cout << i << " "; } return 0; }
代码
class Solution { public: void moveZeroes(vector<int>& nums) { for (int index = 0, current = 0; current < nums.size(); current++) { if (nums[current] != 0) swap(nums[index++], nums[current]); } } };
相关文章推荐
- [LeetCode-283] Move Zeroes(移动零元素)
- LeetCode 283 Move Zeroes(移动所有的零元素)
- LeetCode-283:Move Zeroes (将数组中0元素移至尾部)
- LeetCode--Move Zeroes(移动0元素)Python
- LeetCode283——Move Zeroes(将0移动到数组最后面)
- 【LeetCode】283 Move Zeroes
- leetcode 283 Move Zeroes
- leetcode283 Move Zeroes
- Leetcode 283 Move Zeroes
- leetcode283~Move Zeroes
- leetcode-283-Move Zeroes
- Move Zeroes(移动零元素)
- leetcode-283-Move Zeroes
- [LeetCode]: 283: Move Zeroes
- Leetcode-283 Move Zeroes
- LeetCode 283 Move Zeroes题解
- [LeetCode283]Move Zeroes
- 【LEETCODE】283-Move Zeroes
- LeetCode[283] Move Zeroes
- leetcode 283: Move Zeroes