给定一个数组 nums
,编写一个函数将所有 0
移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入:[0,1,0,3,12]
输出:[1,3,12,0,0]
说明:
- 必须在原数组上操作,不能拷贝额外的数组。
- 尽量减少操作次数。
python实现代码:
class Solution:
def moveZeroes(self, nums):
"""
:type nums: List[int]
:rtype: void Do not return anything, modify nums in-place instead.
"""
if nums == None or len(nums) == 0:
return
i, j = 0, len(nums)-1
while i <= j:
if nums[i] == 0:
k = i+1
while k <= j:
nums[k-1] = nums[k]
k += 1
nums[j] = 0
j -= 1
continue
i += 1
if __name__ == '__main__':
test_case = [0, 0, 1]
my_solution = Solution()
my_solution.moveZeroes(test_case)
print(test_case)
C实现代码:
#include <stdio.h>
void arrayPrint(int *array, int size)
{
int i;
for (i = 0; i < size; i++)
printf("%d ", array[i]);
printf("\n");
}
void moveZeroes(int* nums, int numsSize) {
int i = 0;
int j = 0;
for (i = 0; i < numsSize; i++) {
if (nums[i] != 0) {
nums[j] = nums[i];
j ++;
}
}
for (; j < numsSize; j++)
nums[j] = 0;
}
int main()
{
int test_case[] = {0,1,0,3,12};
moveZeroes(test_case, 5);
arrayPrint(test_case, 5);
return 0;
}