题干:
给定一个数组num,编写一个函数,移动数组中的0至末尾,同时保持非零元素的相同顺序,必须在不复制数组的情况下原地对数组进行操作
解法一:
import java.util.*;
public class Main {
public void moveZero(int[] nums){
int arrayLength = nums.length;
int temp = 0;
for(int i=0;i<arrayLength;i++){
if(nums[i] == 0){
temp = nums[i];
for(int j=i;j<arrayLength-1;j++){
nums[j] = nums[j+1];
}
nums[arrayLength-1] = temp;
arrayLength--;
i--;
}
}
}
public static void main(String []args) {
int[] array1 = new int[]{1,3,4,0,0,8,9,2,0,3};
new Main().moveZero(array1);
for(int i=0;i<array1.length;i++){
System.out.print(array1[i] + " ");
}
}
}
运行结果: 3 2 7 4 9 0
解法二
public class Main6 {
public void moveZero(int[] nums) {
int index = 0,n = nums.length;
for(int i = 0;i<n;i++){
if(nums[i] != 0){
nums[index] = nums[i];
index++;
}
}
for(int i = index;i<n;i++){
nums[i] = 0;
}
}
public static void main(String []args) {
int[] array1 = new int[]{1,3,4,0,0,8,9,2,0,3};
new Main6().moveZero(array1);
for(int i=0;i<array1.length;i++){
System.out.print(array1[i] + " ");
}
}
}
算法执行过程(以数组3 0 2 7 4 9为例)
运行结果: 3 2 7 4 9 0