/*
* @Author: sumBorn
* @Date: 2022-02-21 18:42:28
* @LastEditTime: 2022-02-22 14:53:29
* @Description: https://leetcode-cn.com/leetbook/read/all-about-array/x9rh8e/
*/
/**
* @description: 记录0个数,交换不是0的数与前面0的值
* @param {*}
* @return {*}
*/
public class Solution
{
public void MoveZeroes(int[] nums)
{
int zeroNum = 0;
for (var i = 0; i < nums.Length; i++)
{
if (nums[i] == 0)
{
zeroNum++;
}
else
{
if (zeroNum == 0)
{
}
else
{
//交换第一个0位置:i-zeroNum
nums[i - zeroNum] = nums[i];
nums[i] = 0;
}
}
}
}
}
/**
* @description: 双指针
* @param {*}
* @return {*}
*/
public class Solution
{
public void MoveZeroes(int[] nums)
{
int arrLength = nums.Length;
int left = 0;
for (var right = 0; right < arrLength; right++)
{
if (nums[right] != 0)
{
nums[left] = nums[right];
if (left != right) nums[right] = 0;
left++;
}
}
}
}
//双指针记录
public class Solution
{
public void MoveZeroes(int[] nums)
{
int j = 1;
for (var i = 0; i < nums.Length; i++)
{
if (nums[i] == 0)
{
while (j < nums.Length && nums[j] == 0)
{
j++;
}
if (j >= nums.Length) return;
nums[i] = nums[j];
nums[j] = 0;
}
j++;
}
}
}
移动零
这篇博客介绍了如何使用双指针技术有效地将整数数组中的所有零元素移动到末尾,同时保持非零元素的相对顺序不变。提供了三种不同的实现方式,包括记录0个数并交换、直接双指针交换以及双指针记录,所有方法都旨在优化数组操作的效率。

被折叠的 条评论
为什么被折叠?



