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