zoukankan      html  css  js  c++  java
  • 领扣(LeetCode)移动零 个人题解

    给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

    示例:

    输入: [0,1,0,3,12]
    输出: [1,3,12,0,0]

    说明:

    1. 必须在原数组上操作,不能拷贝额外的数组。
    2. 尽量减少操作次数。

    比较暴力的做法,就是依次判断是否为0,如果是0,用后面的数循环盖掉前面的数,然后在最末尾补0。就这样直到循环结束。不过这里要注意到循环结束的条件,未处理的数组内容是在缩短的,处理过的内容(也就是放在末尾的0)不需要重新处理。

    代码如下:

     1 class Solution {
     2     public void moveZeroes(int[] nums) {
     3         int len=nums.length;
     4         for(int i=0;i<len;i++)
     5         {
     6             if(nums[i]==0)
     7             {
     8                 for(int j=i;j<nums.length-1;j++)
     9                 {
    10                     nums[j]=nums[j+1];
    11                 }
    12                 nums[nums.length-1]=0;
    13                 i--;
    14                 len--;
    15             }
    16         }
    17     }
    18 }

    同时网友题解也给出了比较聪明的做法。就是快慢指针。快针遍历,遇到非0,就让慢针指向的位置置为那个值,如果是0,则跳过。最后把缺的地方补全0。这样减少了数组本身的移动次数,有效提高了代码执行效率

    代码如下:

     1 class Solution {
     2     public void moveZeroes(int[] nums) {
     3         int i=0,j=0;
     4         for(;i<nums.length;i++)
     5         {
     6             if(nums[i]!=0)
     7                 nums[j++]=nums[i];
     8             
     9         }
    10         while(j<nums.length)
    11             nums[j++]=0;
    12     }
    13 }
  • 相关阅读:
    报错处理
    MySQL8.0跟5.7分组查询表所有字段
    模拟开始时间、结束时间生成历史时间生成曲线模拟数据
    查询电脑登录过的WiFI账号密码
    Samba服务器架设
    CentOS安装GitLab
    申请域名并使用DDNS
    极路由4增强版(极企版)-刷潘多拉固件
    Git命令
    elasticsearch7.6.2 -canal1.1.4集成
  • 原文地址:https://www.cnblogs.com/axiangcoding/p/10067937.html
Copyright © 2011-2022 走看看