求助:将递归求数组最小值函数转为无栈迭代(O(1)辅助空间)
将分治递归找最小值转换为O(1)空间的迭代实现
原递归函数通过分治法拆分数组区间查找最小值,但要实现O(1)辅助空间且不使用栈,完全不需要模拟递归的分治调用栈——直接遍历指定的[low, high]区间,维护当前最小值即可,这是最简洁高效的实现方式。
迭代实现代码
int minNumber(int a[], int low, int high) { int current_min = a[low]; for (int i = low + 1; i <= high; i++) { if (a[i] < current_min) { current_min = a[i]; } } return current_min; }
说明
- 这个版本仅用一个变量
current_min存储当前最小值,没有依赖任何额外数据结构,严格满足O(1)辅助空间要求。 - 时间复杂度与原递归一致为O(n)(n为区间元素个数),空间复杂度从递归的O(logn)(递归调用栈深度)降至O(1)。
- 相比模拟分治的迭代逻辑,直接遍历的实现更直观且效率无损耗,完全覆盖原递归函数的功能:返回数组
a中[low, high]区间内的最小值。
内容的提问来源于stack exchange,提问作者Prashant Kumar Singh
相关产品推荐
相关产品推荐

