[leetcode]Move Zeroes

原创 2015年11月20日 14:50:44

题目描述如下:

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.

需要注意的地方note已经说的很明白了,不能开新的数组(也就是只能对原数组进行操作),以及尽量减少移动操作

很自然地想到用双指针法,第一个指针index顺序下来,第二个指针firstZero始终指向最末尾一段连续0的第一个位置上,则移动的时候只需要改变[index,firstZero]这一段的数字即可,避免了每一次都需要把剩下整段数组移动,附上代码:

public class Solution {
            public void moveZeroes(int[] nums) {
            int index = 0, firstZero = -1, j;
            for(; index < nums.length; index ++){
                if(index == firstZero) break;
                if(nums[index] == 0){
                    if(firstZero == -1){
                        for(j = index + 1; j < nums.length; j++){
                            nums[j - 1] = nums[j];
                        }
                        nums[nums.length - 1] = 0;
                        firstZero = nums.length - 1;
                    }else{
                        for(j = index + 1; j < firstZero; j++){
                            nums[j - 1] = nums[j];
                        }
                        nums[firstZero - 1] = 0;
                        firstZero -= 1;
                    }
                    index -= 1;
                }
            }
        }
}

需要注意几个指针的操作:

  1. firstZero的初始值我这里把它定为-1,并且到遇到第一个0时将其值变为nums.length - 1;
  2. 按照我的写法,firstZero每一次的值是需要上移以为的;
  3. index的值需要减去1,从而避免连续两个0的情况,因此for循环这里要注意一下;
  4. 当两个指针相遇时结束

总的来说并不难,通过率也很高

题目链接:https://leetcode.com/problems/move-zeroes/

版权声明:本文为博主原创文章,未经博主允许不得转载。

leetcode 283 Move Zeroes C++

class Solution { public:     void moveZeroes(vector& nums) {         if (!nums.size()) return;  ...
  • a2331046
  • a2331046
  • 2015年12月02日 21:37
  • 463

leetcode 283: Move Zeroes

Move Zeroes Total Accepted: 858 Total Submissions: 1878 Difficulty: Easy Given an array nums...
  • xudli
  • xudli
  • 2015年09月19日 13:32
  • 7643

景岁的Leetcode解题报告:283. Move Zeroes(Python)

景岁的Leetcode解题报告:283. Move Zeroes 解法:从左到右遍历一次,用zero_count记录0出现的次数,对于非零元素,往左移动zero_count位。结束后对最后zero_c...
  • u014373916
  • u014373916
  • 2016年01月29日 15:46
  • 1008

[LeetCode 283] Move Zeroes

Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ...
  • sbitswc
  • sbitswc
  • 2015年09月24日 07:19
  • 3241

leetcode【283 Move Zeros】【python】

是让我们将给定数组里的0都放到数组的末尾,然后还要保持非0元素的顺序不变。也不可以复制数组,尽量少操作次数。最初想的是遇到为0的就pop,然后在尾部append,但是这样如果外面的循环是for的话,那...
  • u014251967
  • u014251967
  • 2016年09月01日 21:55
  • 366

leetcode:283. Move Zeroes(Java)解答

转载请注明出处:z_zhaojun的博客 原文地址:http://blog.csdn.net/u012975705 题目地址:https://leetcode.com/problems/move-...
  • u012975705
  • u012975705
  • 2016年01月10日 21:05
  • 1665

283. Move Zeroes [easy] (Python)

题目链接https://leetcode.com/problems/move-zeroes/题目原文 Given an array nums, write a function to move a...
  • coder_orz
  • coder_orz
  • 2016年05月12日 15:29
  • 1095

[leetcode-283]Move Zeroes(java)

问题描述: Given an array nums, write a function to move all 0’s to the end of it while maintaining the ...
  • zdavb
  • zdavb
  • 2015年09月24日 20:57
  • 840

[Leetcode]Move Zeroes

Given an array nums, write a function to move all 0's to the end of it while maintaining the relati...
  • Javasus
  • Javasus
  • 2015年10月10日 12:51
  • 2906

[LeetCode-283] Move Zeroes(移动零元素)

Given an array nums, write a function to move all 0’s to the end of it while maintaining the relativ...
  • xy010902100449
  • xy010902100449
  • 2015年09月28日 21:26
  • 537
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[leetcode]Move Zeroes
举报原因:
原因补充:

(最多只允许输入30个字)