leetcode 283. Move Zeroes

Given an array nums, write a function to move all 0's to the end of it while maintaining the relative order of the non-zero elements.

For example, given nums = [0, 1, 0, 3, 12], after calling your function, nums should be [1, 3, 12, 0, 0].

Note:

  1. You must do this in-place without making a copy of the array.
  2. Minimize the total number of operations.



void moveZeroes(int*nums, int numsSize) {
	if (numsSize < 2)
		return;
	int k = 0;
	while (k < numsSize - 1)
	{
		while (k < numsSize - 1 && nums[k] != 0)
			k++;
		if (k == numsSize - 1)
			return;
		int k1 = k;
		while (k1 < numsSize && nums[k1] == 0)
			k1++;
		if (k1 == numsSize)
			return;
		int k2 = k1;
		while (k2 < numsSize && nums[k2] != 0)
			k2++;
		for (int i = 0; i < k2 - k1; i++)
		{
			nums[k + i] = nums[k1 + i];
			nums[k1 + i] = 0;
		}
		k += k2 - k1;
	}
}

accepted


你可能感兴趣的:(LeetCode)