283. Move Zeroes
Given an array nums
, write a function to move all 0
's to the end of it while maintaining the relative order of the non-zero elements.
For example, given nums = [0, 1, 0, 3, 12]
, after calling your function, nums
should be [1, 3, 12, 0, 0]
.
给定一个数字数组,写一个方法将所有的“
0
”移动到数组尾部,同时保持其余非零元素的相对位置不变。
例如,给定nums = [
0
,
1
,
0
,
3
,
12
],在调用你的函数之后,nums应该变为[
1
,
3
,
12
,
0
,
0
]。
备注:
你必须就地完成,不得复制该数组。
最小化总共的操作数。
方法一:
1 public void moveZeroes(int[] nums) { 2 int zeroIndex = 0; 3 int nonZeroIndex = 0; 4 int size = nums.length; 5 6 while(zeroIndex<size && nonZeroIndex<size){ 7 while(zeroIndex<size && nums[zeroIndex]!=0) zeroIndex++; 8 while(nonZeroIndex < size && (nums[nonZeroIndex]==0 || nonZeroIndex<zeroIndex)) nonZeroIndex++; 9 10 //swap the value 11 if(zeroIndex<size && nonZeroIndex<size){ 12 nums[zeroIndex++] = nums[nonZeroIndex]; 13 nums[nonZeroIndex++] = 0; 14 } 15 } 16 }
方法二
1 private int findValue(int[] nums, int start, boolean isZero) { 2 if (start >= nums.length || start < 0) return -2; 3 for (int i = start; i < nums.length; i++) { 4 if (isZero) { 5 if (nums[i] == 0) 6 return i; 7 } else { 8 if (nums[i] != 0) 9 return i; 10 } 11 } 12 return -2; 13 } 14 15 public void moveZeroes(int[] nums) { 16 int length = nums.length; 17 int zero = -2; 18 int number = -2; 19 if (length == 0) return; 20 zero = findValue(nums,0,true); 21 if (zero == -2) { 22 return; 23 } 24 number = findValue(nums,zero,false); 25 if (number == -2) { 26 return; 27 } 28 29 while (zero < number) { 30 nums[zero] = nums[number]; 31 nums[number] = 0; 32 zero = findValue(nums,zero+1,true); 33 if (zero == -2) { 34 break; 35 } 36 number = findValue(nums,zero+1,false); 37 if (number == -2) { 38 break; 39 } 40 } 41 }
【推荐】国内首个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帮你做增删改查!!