在没有第二个变量的情况下获得最大数组?

时间:2017-06-23 23:33:42

标签: c++

有没有一种方法可以在不使用嵌套循环/第二变量的情况下找到数组的最大值?也许或者可能不使用掉期取决于前两个要求的可能性/不可能性

干杯!

这也是我努力想到的一个问题,因为我之前在采访中听到过这个问题,但我没有找到解决方案!

编辑:没有使用任何功能,而第二个变量我的意思是" max"我们通常使用的变量,只允许使用循环迭代数组元素,我们只能使用数组元素本身,即使我们为了获得最大值而更改所有值。

2 个答案:

答案 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];
  }
}

另见std::max_element

编辑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

在任何情况下,无论如何,任何人都不应该永远认为这是一个好主意。 它回答了一个愚蠢的面试问题,而且就是这个问题。你会打击堆栈。坏事会发生。并且,仅仅因为我没有声明变量并不意味着我没有在堆栈上生成一个变量。