【发布时间】:2021-01-18 12:54:17
【问题描述】:
我试图清理给定数组示例中的“NaN”变量; 我的输入数组 A 是:
float A[] = { 5.0f, NAN, 1.5f, 0.0f, 1.75f };
预期的输出数组 A 是:
{5.0f,1.5f, 0.0f, 1.75f}
我可以删除每个 NAN 并将元素向左移动一次。 但是如果数组太大而无法处理,就会成为低效的算法。
我在 C 中找不到任何解决方案。 所以我的问题是有没有比这些方法更有效的解决方案?
问候。
【问题讨论】:
-
(a) “将元素向左移动一次”是什么意思?显示代码,或者至少是伪代码,解释你的意思。 (b) C 中的数组是一组连续分配的特定类型的对象。如果输出数组要包含非 NaN 值,则它们必须移动到该位置。如果输出是一个数组,就没有办法了。可能有快速的方法可以做到这一点,并且可能有其他方法可以管理数据而不是作为数组。
-
我的意思是,我可以检测到“NaN”值。然后获取该变量的索引(例如 a)。在数组的最后一个元素之前,它看起来像 array[a] = array[a+1]。
-
每次找到 NaN 时,都不需要在
array[a] = array[a+1]上进行迭代。你能想到另一种算法吗? -
好吧,例如,如果我使用的是现代 C++,我可以使用 STL 库和向量作为容器,所有的工作都只是使用擦除方法。所以我在 C 中寻找类似的解决方案。
-
你必须以某种方式填补空白......