Move_Zeros问题

2019-05-06  本文已影响0人  MikeShine

这里有一个移动0元素到末尾的问题。其实这个问题是非常简单的,思路也很清楚。不过说实话,调代码还是用了一些时间的,主要问题在于,自己被 trapped into the prob 了,没有及时的跳出来看一下。以后一定要注意这一个点。

问题要求:

问题要求

分析

其实也没啥分析的,按照自己的思路来看,就是直接在内部移动0元素即可,做交换。

思路

写代码的过程中,遇到了一个问题,就是对于连续 的0元素怎么处理,这里用 while 语句,并且利用一个marker来记录连续0开始的地方,将其与后面的非0元素进行交换。

代码

package day_43;
// 这里主要注意连续0的处理。
// 用while循环和一个 marker 来记录并交换。
// 并且需要注意没有

import java.util.Arrays;

public class MoveZeros {
    public void moveZeros(int[] nums){
        int marker = 0;
        for(int i=0;i<nums.length-1;i=marker+1){
            if(nums[i]==0){
                marker = i;
                while (nums[i+1]==0 && i+1<nums.length-1){
                    i++;
                }
                int temp = nums[marker];
                nums[marker] = nums[i+1];
                nums[i+1] = temp;
            }
            else marker=i;
        }
    }

    public static void main(String args[]){
        MoveZeros m = new MoveZeros();
        int a[] = {1,1,1};
        m.moveZeros(a);
        System.out.println(Arrays.toString(a));
    }
}

提交之后发现运行时间上面,不是很快


别人的思路

双指针法。
其实这种 in-place 交换问题,都可以用双指针法来做。简单,好写。

上一篇 下一篇

猜你喜欢

热点阅读