[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笔记--Move Zeroes

 Move Zeroes 题目:难度(Easy) Given an array nums, write a function to move all 0's to the end of it...

leetcode--Move Zeroes

Given an array nums, write a function to move all 0’s to the end of it while maintaining the relativ...

<LeetCode OJ> 283. Move Zeroes

283. Move Zeroes My Submissions Question Total Accepted: 40008 Total Submissions: 94323 Difficul...

leetcode submission/20161018(move zeroes)

明天发工资啊666 Given an array nums, write a function to move all 0's to the end of it while maintain...

LeetCode之Move Zeroes

1、题目 Given an array nums, write a function to move all 0's to the end of it while maintaining...

(数组)leetcode 283:Move Zeroes

(数组)leetcode 283:Move Zeroes

【LeetCode-283】Move Zeroes(C++)

题目要求:        给出一个数组,要求写一个函数把数组中所有的0全部挪到数组的最后面,同时保持数组中非0元素的顺序不变。比如给出一个数组nums=[0,1,0,3,12]。调用函数之后nums变...

LeetCode Move Zeroes

题目: Given an array nums, write a function to move all 0's to the end of it while maintaining ...

leetcode-283. Move Zeroes c语言

1、来源:点击打开链接 2、题目: Given an array nums, write a function to move all 0's to the end of it while ma...
  • tzh476
  • tzh476
  • 2016年07月20日 07:49
  • 260

[Leetcode 283]Move Zeroes

题目描述: Given an array nums, write a function to move all 0's to the end of it while maintaining th...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[leetcode]Move Zeroes
举报原因:
原因补充:

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