c# - 将数组中的值与数组中之前的所有值进行比较的有效方法

标签 c# arrays performance algorithm

我有一个很长的数组 numbers[]。我的算法需要在 numbers[] 中找到 |numbers[j] - numbers[i]| <= x 所在的最低索引 j (随机变量)或 |numbers[j] - numbers[i]| >= m - x (m 另一个变量,大于 x),其中 i<j .

现在这是我的算法:

 for (int j = 1; j < numbers.Length; j++)
 {
     for (int i = 0; i < j; i++)
     {
        long diff = Math.Abs(numbers[j] - numbers[i]); 
        if (diff <= x || diff >= m - x)
            return j;
     }
 }

这可以更有效地完成吗?例如,一个非常大的数字输入需要我的笔记本电脑大约 36 秒。

最佳答案

您可以通过遍历数组并在每个阶段将新数字添加到平衡搜索树来在 O(nlogn) 中完成此操作。

当您添加号码时,您首先要搜索搜索树中已有的最接近的号码。如果这个数字小于目标差异,那么您就找到了答案。

关于c# - 将数组中的值与数组中之前的所有值进行比较的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30291789/

相关文章:

c# - C# 中空 ";"语句的性能问题

c# - 如何读取后代的成员/子节点?

C++ 从本地计算机获取 WMI 数组数据

php - PHP中预算范围的数组排序

javascript - AngularJS 如何包含其他文件中的数组?

c++ - 在堆上分配时对齐内存

c# - CloudBlob.OpenRead() 未读取所有数据

c# - 如何将 Artifact 归档到特定目录?

c# - 使用 Process 类的 C# 应用程序中的 ffmpeg - 用户提示未显示在标准错误中

读取标准输入的 C++ 最快的 cin?