有没有一种方法可以在不使用嵌套循环/第二个变量的情况下找到数组的最大值?可能也可能不使用交换,这取决于前 2 个要求的可能性/不可能
干杯!
这也是我一直在努力思考的一个问题,因为我之前在采访中听说过这个问题,但我没有找到解决方案!
编辑:不使用任何函数,第二个变量是指我们通常使用的“max”变量,只允许使用循环来遍历数组元素,即使我们更改,我们也只能使用数组元素本身他们所有的价值都是为了最大限度地利用它。
当我收到这个问题时,在一次采访中,面试官不允许排序,因为它要么改变了源数组,要么强迫你排序到一个临时数组中。他对循环变量犹豫不决(尽管他不反对跟踪数组的大小 - 看图)。他还认为有比 O(n log n) 更好的解决方案。所以这是这个愚蠢问题的 O(n) 解决方案。
#include <algorithm>
int int_max(int * array, int size) {
if (size == 1)
return *array;
return std::max(*array, int_max(array+1, size-1));
}
在任何情况下,无论如何,任何人都不应该认为这是一个好主意。它回答了一个愚蠢的面试问题,仅此而已。你会炸毁堆栈。不好的事情会发生。而且,仅仅因为我没有声明一个变量并不意味着我没有在堆栈上生成一个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句