移动零
题目
给一个数组 nums 写一个函数将 0 移动到数组的最后面,非零元素保持原数组的顺序
注意事项
1.必须在原数组上操作
2.最小化操作数样例
给出 nums = [0, 1, 0, 3, 12], 调用函数之后, nums = [1, 3, 12, 0, 0].
题解
定义双指针i,j分别表示0和非0数,分别向后遍历查找,将找到的i,j交换,直至遍历完毕。
public class Solution {
/**
* @param nums an integer array
* @return nothing, do this in-place
*/
public void moveZeroes(int[] nums) {
int i = 0;
int j = 1;
int n = nums.length;
while (i < j && j < n)
{
while (i < n && nums[i] != 0)
{
i++;
}
j = i+1;
while (j < n && nums[j] == 0)
{
j++;
}
if (i < j && j < n)
{
swap(nums,i++,j++);
}
}
}
private void swap(int[] nums,int a,int b)
{
int temp = nums[a];
nums[a] = nums[b];
nums[b] = temp;
}
}
Last Update 2016.9.18