[Leetcode] Move Zeroes, Solution

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:
  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.

[Thoughts]
典型的双指针问题。使用两个指针遍历数组,一个指向数值为0的元素,另一个指向数值不为0的元素,在遍历的过程中,不断交换两个指针的值。

例如,
Picture2.png

比较简单的一道题。

[Code]
1:  class Solution {  
2: public:
3: void moveZeroes(vector<int>& nums) {
4: for(int zero_index = 0, none_zero_index = 0;
5: none_zero_index < nums.size() && zero_index < nums.size();
6: ) {
7: if(nums[zero_index] != 0) {
8: zero_index++;
9: none_zero_index = zero_index;
10: continue;
11: }
12: if(nums[none_zero_index] == 0) {
13: none_zero_index++;
14: continue;
15: }
16: int temp = nums[zero_index];
17: nums[zero_index] = nums[none_zero_index];
18: nums[none_zero_index] = temp;
19: zero_index++;
20: none_zero_index++;
21: }
22: }
23: };

git: https://github.com/codingtmd/leetcode/blob/master/src/Move_Zeroes.cpp




转载于:https://www.cnblogs.com/codingtmd/p/5078839.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值