c# - 将数组中的所有非零元素拉到左侧 - C#

标签 c# arrays

如果我有以下数组

{ 1, 0, 0, 1, 2, 0, 1 }

我想要一个方法来获取数组并将其更改为

{ 1, 1, 2, 1, 0, 0, 0 }

执行此操作的最佳算法是什么?是否可以在 O(N) 时间内完成?

这个问题基本上是我的确切问题,除了在 python 中而不是 c# 中,以防我不清楚:(唯一的区别是将零移到右边,而不是左边) how to move all non-zero elements in a python list or numpy array to one side?

谢谢

编辑:我遇到了另一个我一开始没有考虑的问题。我实际上试图在一个二维数组上运行这个算法,但只在一个特定的维度上。我将如何更改以解决这个问题?

最佳答案

这里有一种方法可以做到这一点。

var original = new int[] { 1, 0, 0, 1, 2, 0, 1 };
var nonZeroes = original.Where(x => x != 0); //enumerate once
var numberOfZeroes = original.Count() - nonZeroes.Count(); 
return nonZeroes.Concat(Enumerable.Repeat(0, numberOfZeroes)).ToArray();

关于c# - 将数组中的所有非零元素拉到左侧 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31547269/

相关文章:

c++ - 在 C++ 中从函数返回数组到 main

python - 将 png 图像传递给 numpy 数组,第四列最后一个维度是多少?

c# - 如何将枚举转换为 List<SelectListItem>?

c# - 聚合与任意,用于扫描 IEnumerable<bool> 等对象

c# - 如何在不乘以 100 的情况下在 FormatString 中使用百分比 %?

javascript - 计算 JavaScript 中数组数组的数值总和

javascript - 循环遍历对象数组

c# - 穿越 BMP 中的像素

c# - asp.net 网页中 Request 和 Request.Form 的良好实践 2

c - 从输入插入数组中的元素 [核心转储(段错误)]