【发布时间】:2020-09-25 09:22:09
【问题描述】:
我目前正在做C编程,当当前索引定义为int变量idx时,我需要从idx中找到[0, idx-1]范围内最近的负元素数组。
例如,如果数组是 1 -2 3 -4 5 6 并且 idx 是 5(array[idx] 将是 6),函数必须返回 3,因为 -4 是 array[idx] 中最近的负元素。
我知道如何线性解决这个问题,比如
for(int i = idx-1; i>=0; i--){
if(array[i] < 0) return i;
}
但我想知道更快的算法(这意味着具有较低时间复杂度的算法),因为我目前正在研究元素超过百万的大型数组。有人可以帮忙吗?
【问题讨论】:
-
O(N) 是最好的情况,但如果数组没有改变,你可以缓存结果。一次搜索包含一百万个元素的数组还不错。
-
我必须在迭代数组时执行这个函数(idx是数组的迭代器),所以整体复杂度应该是O(n^2)。但我想我别无选择:(
-
@Martin Jones "unction 必须返回 3, as -4 " 为什么不是 1 as -2?
-
在你迭代它时数组会改变吗?如果不是,那么只需记住最后一个负值的索引。
标签: c arrays performance search time-complexity