Appearance
0283-移动零
https://leetcode.cn/problems/move-zeroes
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意,必须在不复制数组的情况下原地对数组进行操作。
示例 1:
输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]
示例 2:
输入: nums = [0]
输出: [0]
提示:
1 <= nums.length <= 10^4
-2^31<= nums[i] <= 2^31- 1
进阶:你能尽量减少完成的操作次数吗?
思路
题目要求0移动到末尾,且相对顺序要保持 双指针从前往后遍历,非0直接跳过,遇到0,则复制下一个元素过来,并且将该元素位置设置为0
参考代码
csharp
public class Solution {
public void MoveZeroes(int[] nums) {
int i = 0;
while(i<nums.Length && nums[i] != 0 ){
i++;
}
for(int j = i+1; j < nums.Length; j++){
if(nums[j] != 0){
nums[i] = nums[j];
nums[j] = 0;
i++;
}
}
}
}
参考代码:优化前置0的判断
csharp
public class Solution {
public void MoveZeroes(int[] nums) {
int left = 0;
for(int i=0; i<nums.Length; i++){
if(nums[i] != 0){
nums[left] = nums[i];
if(i != left){
nums[i] = 0;
}
left++;
}
}
}
}
AlgoPress