LeetCode 283. 移动零(C#实现)——数组
一、问题
https://leetcode-cn.com/problems/move-zeroes/
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。二、GitHub实现:https://github.com/JonathanZxxxx/LeetCode/blob/master/MoveZeroesClass.cs‘’
Blog:https://www.cnblogs.com/zxxxx/
三、思路
index标识非零的个数,循环遍历数组;如果不是0,就将非零的值移到index位,index加一;遍历结束后,再次遍历,index后的位置都为0
优化思路:不需要第二次遍历,第一次遍历数组时判断下标是否等于index,不等于就将当前值置为零
四、代码实现
public class MoveZeroesClass
{
public void MoveZeroes(int[] nums)
{
if (nums == null || nums.Length == 0) return;
//非零个数
var count = 0;
for (int i = 0; i < nums.Length; i++)
{
//非零值移到当前指针位置
if (nums[i] != 0)
{
nums[count] = nums[i];
count++;
}
}
//当前指针位置后都为0
for (int i = count; i < nums.Length; i++)
{
nums[i] = 0;
}
}
public void MoveZeroes2(int[] nums)
{
if (nums == null || nums.Length == 0) return;
var current = 0;
for (int i = 0; i < nums.Length; i++)
{
if (nums[i] != 0)
{
nums[current] = nums[i];
//num[i]值置0
if (current != i)
{
nums[i] = 0;
}
current++;
}
}
}
} 相关推荐
aanndd 2020-08-12
zangdaiyang 2020-07-04
aanndd 2020-07-26
aanndd 2020-07-08
yaohustiAC 2020-06-28
us0 2020-06-28
yaohustiAC 2020-06-28
zangdaiyang 2020-06-28
Clairezz 2020-06-28
嗡汤圆 2020-06-26
嗡汤圆 2020-06-21
aanndd 2020-06-16
aanndd 2020-06-16
码墨 2020-06-16
yaohustiAC 2020-06-11
zangdaiyang 2020-06-10
jiayuqicz 2020-06-09
yaohustiAC 2020-06-06
heray0 2020-06-04