zoukankan      html  css  js  c++  java
  • leetcode 283. 移动零


    本题 题目链接

    题目描述


    我的题解

    方法一:

    思路分析

    • 慢指针cur记录当前可以被覆盖的位置,快指针i从头到尾遍历数组:
      • 当nums[i]!=0的时候,用i位置的元素覆盖cur位置的元素,然后i++,cur++。
      • 若nums[i]=0,只有i++.
    • 并不会造成值的丢失:
      • 第一次循环的时候,若nums[i]非零,此时执行nums[cur] = nums[i],i 与 cur 的值一致,并不会造成数据的丢失。
        此后i++,cur++,然后进入第二次循环,在遇到值为0的元素之前,i与cur的值一直保持一致。
      • 当第一次遇到值为 0 的时候,只有i执行了加一操作,此时,cur与i已经不相等了,而cur指向的刚好就是这个值为0的位置(因为在之前cur有+1呀)。
        继续执行循环,当遇到nums[i]非零时,nums[cur]=nums[i],此时nums[i]覆盖的值是0,无所谓~
        而 i 这个位置的值也被记录下来了,哪怕后续cur指向了这个i的位置,也无所畏惧了~
    • 循环结束之后呢,还有一个循环,这个循环是为了把cur后面的元素都赋值为0(因为上一个循环中,i走在cur前面,把非零元素的值都拿出来了,拿出来后,i 位置的值还留在那里 并没有被更换为0)
        public void moveZeroes(int[] nums) {
            if(nums == null) return ;
            int cur = 0;
            for (int i = 0; i < nums.length; i++) {
                if (nums[i] != 0) {
                    nums[cur++] = nums[i];
                }
            }
            while (cur < nums.length)nums[cur++] = 0;
        }
    

  • 相关阅读:
    直接插入排序
    归并排序
    正则问题
    九宫重排
    java合并两个集合并通过stream流构建响应结果
    企业微信扫码登录
    docker安装es
    docker安装nacos随记
    解决docker安装mysql8.0无法远程连接问题
    java分析工具10:jvm测试与调优
  • 原文地址:https://www.cnblogs.com/duduwy/p/13410876.html
Copyright © 2011-2022 走看看