移动零-leetcode
题目描述
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
请注意 ,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
提示:
1 <= nums.length <= 104
-231 <= nums[i] <= 231 - 1
解法
思路:
双指针的方法,一个指针cur
记录当前数组最有一个非零数的位置,另外一个指针por
作为探测指针,用来向后探测,寻找非零书的位置,当por
找到一个非零数时,cur+1
位置的赋值为该非零数,por
位置元素变为0,之后por
继续向后探测。
代码:
import java.util.Arrays;
import java.util.Scanner;
public class leetcode_004 {
public static void moveZeroes(int[] nums) {
//两个指针,一个记录前面数组最后一个非零数的位置,一个探针,寻找非零数位置
int cur=-1,por=1;
if(nums==null || nums.length==1){
System.out.println(nums[0]);
return;
}
for(por=0;por<nums.length;por++){
if(nums[por]!=0){
int temp=nums[por];
nums[por]=0;
nums[cur+1]=temp;
cur++;
}
}
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String[] line = sc.nextLine().split(",");
int[] nums= Arrays.stream(line).mapToInt(Integer::parseInt).toArray();
moveZeroes(nums);
for (int i:nums) {
System.out.print(i+" ");
}
}
}