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

参考自:https://blog.csdn.net/qq_38200548/article/details/80688630

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

  说明:

    1.必须在原数组上操作,不能拷贝额外的数组。
    2.尽量减少操作次数。
复制代码
package suanfa;

public class demo2 {
    public static void main(String[] args) {
        //随便定义一个数组
        int[] arr={1,2,0,3,0,4,5,0};
        moveZeros(arr);
        for (int i : arr) {
            System.out.print(i+" ");
        }
    }
    private static void moveZeros(int[] arr) {
        //定义了两个快慢指针
        int slow=0,fast=0;
        while(fast<arr.length) {
            if (arr[fast] != 0) {
                arr[slow] = arr[fast];
                slow++;
                fast++;
            } else {// 一旦这个数组上的数字是0,那么fast指针就需要往前走
                   // slow指针停留在0这个位置,在等待着fast发现了非0的数字将0位置的slow指针覆盖掉
                fast++;
            }
        }
        // slow跟fast相差了多少,就说明这个数组有多少个0,在上面填充完元素之后,
        // 就需要将漏掉的0补上
        for (int i = slow; i <arr.length ; i++) {
            arr[i]=0;
        }
    }
}
复制代码

 

 
 
posted @   程序员Forlan  阅读(1871)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示