【发布时间】:2015-05-17 20:26:36
【问题描述】:
我有一个很长的数组 numbers[]。我的算法需要找到 numbers[] 中的最低索引 j,其中 |numbers[j] - numbers[i]| <= x(随机变量)或 |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 秒。
【问题讨论】:
-
这不包含在解释
|| diff >= m - x -
除了
Int32.MaxValue的隐含限制之外,数字和x是否有上限? -
x最大可以是1000万,其他值(在数组中)最大可以是1000亿。
-
只是好奇,算法的目的是什么?您如何处理
j索引?为什么不同时返回i? -
你可以对数组进行排序吗?
标签: c# arrays performance algorithm