Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 算法:从数组中的位置获取数组中大于最小值的最近数_Arrays_Algorithm - Fatal编程技术网

Arrays 算法:从数组中的位置获取数组中大于最小值的最近数

Arrays 算法:从数组中的位置获取数组中大于最小值的最近数,arrays,algorithm,Arrays,Algorithm,假设我有一个整数数组arr。对于给定的索引,i,我想知道满足以下条件的索引j: 1. j < i 2. arr[j] >= val 3. i - j is as small as possible 1。j=val 3.i-j尽可能小 其中val是一个函数参数,每次调用此查找函数时都可以更改。在O(n)中,可以通过迭代从i-1开始的每个元素,直到找到arr[j]>=val或到达数组的开头,轻松地解决这个问题。但是,如果在同一数组上多次执行这种类型的查询(数组中的数字不变),是否可以

假设我有一个整数数组arr。对于给定的索引,
i
,我想知道满足以下条件的索引
j

1. j < i
2. arr[j] >= val
3. i - j is as small as possible
1。j=val
3.i-j尽可能小

其中
val
是一个函数参数,每次调用此查找函数时都可以更改。在
O(n)
中,可以通过迭代从
i-1开始的每个元素,直到找到arr[j]>=val
或到达数组的开头,轻松地解决这个问题。但是,如果在同一数组上多次执行这种类型的查询(数组中的数字不变),是否可以利用数据结构实现更快的查找?有可能获得
(O(logN)或O(1))
查找吗?

如果我理解正确,BTree具有您希望的“更快”的查找复杂度,并且“O()”在这里不一定相关:现代CPU、内存和编译器针对线性扫描进行了大量优化。你想要“更快”还是“更低的理论时间”复杂性?”而不是为每个元素创建一个映射,该映射存储了保存给定值的最近的前一个元素的索引?这会起作用“:我不确定这会起什么作用,因为你不知道你将得到的值。该值只能作为查询使用,对吗?数据结构应该在发出查询之前准备好,对吗?还是我错过了什么?@trincot,事实上,你是对的。我在考虑维护另一个长度与整数数组相等的数组,其中每个索引存储一个映射,该映射将先前观察到的数字的值映射到它们的索引。我忽略的问题是,即使我有这些信息,我也可以快速确定满足最小阈值要求的一组索引,但我仍然必须在它们之间进行迭代,以确定哪个元素最接近。所以它仍然是O(n),但要复杂得多。我从上面的问题中去掉了那个坏主意。@IanMercer,你可能是对的。我想要更快,但唯一能知道的是基准线线性搜索方法。问题是,我不知道还有别的选择。