算法题——给定一个数组 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; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!