arrays - 从 C 中的数组中消除 NaN 值
问题描述
我试图清理给定数组示例中的“NaN”变量;我的输入数组 A 是:
float A[] = { 5.0f, NAN, 1.5f, 0.0f, 1.75f };
预期的输出数组 A 是:
{5.0f,1.5f, 0.0f, 1.75f}
我可以删除每个 NAN 并将元素向左移动一次。但是如果数组太大而无法处理,它将成为低效的算法。
我在 C 中找不到任何解决方案。所以我的问题是有没有比这些方法更有效的解决方案?
问候。
解决方案
有一个O(n)
使用两个指针技术的解决方案。可以将所有NaN
术语交换到数组的末尾,同时保留非NaN
术语的相对顺序。
p
记录遇到的非NaN
术语数量并返回以跟踪A
.
int moveNAN(float A[], int n)
{
int p = 0;
for(int i = 0; i < n; ++i)
if(!isnan(A[i])) // if `isnan` is not defined use `A[i] == A[i]` (NaN values return false)
{
if(p != i)
swap(A[i], A[p]);
++p;
}
return p;
}
推荐阅读
- reactjs - ReactNative:查看 *behind* ScrollView
- json - 从 json 字符串中删除多余的字符并处理无数据类型 Python
- python - 试图确保正确的窗口现在处于活动状态
- javascript - 将领域文件从领域服务器上传到 NodeJS 中的 AWS S3 存储桶
- android - android中具有相同ID和相同行为的两个按钮
- c# - Dapper 产生不同的结果
- angular - 将 Angular Playground 安装到 Ionic 4 项目后的空白页面
- java - apache点燃加载缓存ClassCastException
- javascript - FullCalendar 和 JQuery 事件
- php - 你知道如何防止在 WP 中超过主页的页面被索引吗?