有没有一种方法可以在不使用嵌套循环/第二变量的情况下找到数组的最大值?也许或者可能不使用掉期取决于前两个要求的可能性/不可能性
干杯!
这也是我努力想到的一个问题,因为我之前在采访中听到过这个问题,但我没有找到解决方案!
编辑:没有使用任何功能,而第二个变量我的意思是" max"我们通常使用的变量,只允许使用循环迭代数组元素,我们只能使用数组元素本身,即使我们为了获得最大值而更改所有值。
答案 0 :(得分:4)
您只需要一个变量,以包含最大值。
int maximum_value = std::numeric_limits<int>min();
for (size_t i = 0; i < array_capacity; ++i)
{
if (array[i] > maximum_value)
{
maximum_value = array[i];
}
}
编辑1:除循环索引
外没有其他变量for (size_t i = 1U; i < array_capacity; ++i)
{
if (array[i] > array[0])
{
array[0] = array[i];
}
}
答案 1 :(得分:2)
当我得到这个问题时,在面试中,面试官不允许排序,因为它要么改变源数组,要么强迫你排序成临时数组。他对一个循环变量犹豫不决(尽管他没有反对跟踪数组的大小 - 去图)。他还认为,有比O(n log n)解决方案更好的解决方案。所以这是这个愚蠢问题的O(n)解决方案。
metaNum
在任何情况下,无论如何,任何人都不应该永远认为这是一个好主意。 它回答了一个愚蠢的面试问题,而且就是这个问题。你会打击堆栈。坏事会发生。并且,仅仅因为我没有声明变量并不意味着我没有在堆栈上生成一个变量。