美文网首页
Move_Zeros问题

Move_Zeros问题

作者: MikeShine | 来源:发表于2019-05-06 11:40 被阅读0次

    这里有一个移动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 交换问题,都可以用双指针法来做。简单,好写。

    相关文章

      网友评论

          本文标题:Move_Zeros问题

          本文链接:https://www.haomeiwen.com/subject/lakroqtx.html