283 移动零
1 题目描述
给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
2 解题思路
定义一前一后两个指针 pre
,post
,pre
始终指向0,post
指向其后第一个非零数字,将两者进行交换,直到执行到post
到达数组尾部。
3 代码
class Solution {
public void moveZeroes(int[] nums) {
int len = nums.length;
int left = 0;
int right = 0;
while(right<len){
if(nums[right]!=0){
swap(nums,left,right);
left++;
}
right++;
}
}
public void swap(int[] a ,int m, int n){
int temp = a[m];
a[m] = a[n];
a[n] = temp;
}
}