Huge Lemon的博客

移动零

2020-03-16

LeetCode 283. Move Zeroes

题目描述

给定一个数组 nums,编写一个函数将所有 $0$ 移动到数组的末尾,同时保持非零元素的相对顺序。

示例:

输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:

1. 必须在原数组上操作,不能拷贝额外的数组。
2. 尽量减少操作次数。

解题思路

方法:双指针
用两个指针i, j从头到尾依次遍历,遇到零元素就记录位置,遇到非零元素就进行替换零的操作
当一个指针i进行完一次遍历,此时非零元素已经全部移动到前面的位置,只需要将剩余位置上的元素置为零即可

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void moveZeroes(int* nums, int numsSize){
int i, j = 0;
for(i = 0; i < numsSize; i++){
if(nums[i] != 0){ //遇到非零元素进行替换零
nums[j++] = nums[i];
}
// else 继续查找非零元素
}

// 将剩余位置上的元素置为零
while(j < numsSize){
nums[j++] = 0;
}
}
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏