LeetCode283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/move-zeroes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
分析:
根据题目要求,我们需要把数组中的0,移动到数组的末尾,首先我们想到就是把数组前面的0,和后面的数字调换,这样的操作次数很少,但是为了增加稳定性,我这里选择了稍微复杂的一种方法;首先,先取一个指针 i,从第一个元素开始走,如遇到当前元素为0时,取另一个指针从 i+1 开始找到第一个不是0的数字与其交换。(示意图如下)
代码实现:
//283. 移动零
import java.util.Arrays;
class Leetcode283{
public static void main(String[] args){
int[] arr={0,1,0,3,12};
//创建对象
moveZeroes move=new moveZeroes();
move.moveZeroes(arr);
}
}
class moveZeroes{
public void moveZeroes(){ //构造函数
}
public void moveZeroes(int[] nums){
int count=0;
if(nums.length<2){ //长度小于2 ,则无需移动
return;
}
for(int i=0;i<nums.length;i++){
if(nums[i]==0){ //当前位置是0时
for(int j=i+1;j<nums.length;j++){
if(nums[j]!=0){ //向后找第一个不是0的数字,与其交换
nums[i]=nums[j];
nums[j]=0;
break;
}
}
}
}
System.out.println(Arrays.toString(nums));
}
}