2017-06-23 3 views
-4

ネストされたループ/ 2番目の変数を使用せずに配列の最大値を見つける方法はありますか?おそらく多分スワップを使用していない可能性があります/不可能それは最初の2つの要件である2番目の変数を持たない配列を最大限に活用するには?

乾杯!

またこれは質問です。前回のインタビューで尋ねられたと聞きましたが、解決に失敗しました。

編集:機能は使用されず、2番目の変数は私が通常使用する "最大"変数を意味し、ループを使用して配列要素を反復することのみが許可されています。最大値を得るためにすべての値を変更したとしても、

+0

クイズのパラメータによっては、配列を 'std :: sort 'することができます。確かに、ループが関わっていますが、あなたはそれらを書きませんでした。 – user4581301

+4

'auto最大= * std :: max_element(std :: begin(theArray)、std :: end(theArray)); ' – PaulMcKenzie

+0

いいえ、機能はありません!関数がなく、2番目の変数がなければ意味するときは私が通常使っている "最大"変数を意味し、私の悪い点は明確にはっきりしませんでした – Biggie

答えて

2

私はこの質問を得、インタビューの中で、許可されていないインタビュアーはあなたにソートするソートません一時配列。彼はループ変数を嫌っていました(しかし、配列のサイズを追跡することに反対していませんでしたが)。彼はまた、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)); 
} 

これはいい考えではありません。 それは愚かなインタビューの質問に答える、それはそれについてです。あなたはスタックを爆破するでしょう。悪いことが起こります。そして、私が変数を宣言していないからといって、スタック上に変数を生成しているわけではありません。

+0

これは愚かなインタビューの質問であり、現実世界での使用には実用的ではないことに言及してくれてありがとう。 –

4

最大値を含む変数は1つだけ必要です。

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]; 
    } 
} 
+0

シュート。 'max_element'を忘れました。それはソートよりも優れています。 – user4581301

+0

いいえ、機能はありません。その関数がなく、私が2番目の変数なしで意味するとき、私が通常使用する "最大"変数を意味し、私の悪い部分は明確にはっきりしません。 – Biggie

+0

'numeric_limits min'はコンパイル時定数です。最も低い値であることが保証されている値を使用することができます。 –

関連する問題