ここで、私はインタビューでアルゴリズムの質問をするのが好きな人の一人であることを認めなければなりませんが、質問に対する実際の答えは絶対に無関係であることを強調しなければなりません。インタビュイーが答えを知っているかどうかは気にしません。代わりに、私にとって、この質問は次のようなさまざまな側面をターゲットにしています-重要度の順に:
必要条件
そのような質問は、意図的に不十分に指定されています。この例では、シーケンスについてこれ以上の詳細は提供されていません。これらの数値が実際にソートされているかどうかを尋ねるインタビュー対象者がいる場合、それは良い兆候です。彼は顧客に詳細を尋ねる正しい考え方を持っているので、より短い時間でより良いソリューションを見つけることができます。候補者は、O(n)空間を使用してN個の数値の配列を格納するというアイデアをもてあそぶかもしれませんが、XとYの詳細について尋ねることなく、それを行うべきではありません。XとYは1〜1000 、そして確かに、先に進み、アレイベースのソリューションを立ち上げてください。しかし、間隔が10億と10億であると言えば、問題はまったく異なるものになります。繰り返しますが、解決策については気にしないでください。
標準テクニック
O(n)の意味がわからないプログラマを雇いたくありません。それはあなたがその分野でまともな教育を受けたかどうかを絶対に知っておく必要があります。しかし、それが何を意味するかを知るだけでなく、その知識を実際に適用することも重要です。あなたの例では、候補者は、ソートが必要なO(n log n)のため、データをソートすることは許可されていないことを理解したいです(バケットソートまたは他のO(n)ソートアプローチのオプションを対象とするさらなる質問をすることなく)一般に。
同様に、他のアルゴリズムの質問は、ツリーまたはグラフのトラバース、または再帰などの標準的な手法を対象としています。候補者は、これらのテクニックの1つをすり抜けてしまう可能性がありますが、これは良い印象を与えません。ただし、そのような場合は、候補者がCSの背景をまったく持っているかどうかを調べるために、さらに深く掘り下げたいと思います。もちろん、それはターゲットの位置に依存しますが、通常は実行時の複雑さや典型的なデータ構造とそのトラバースを知らない開発者は何の助けにもなりません。
問題解決の考え方
質問をした後、候補者を綿密に監視します。どのように反応しますか?ここでは、最初に問題を解決する方法がまったくわからない候補者から最高の結果を得ることができます。その点で、質問は職場で同様の状況が後で発生した場合に何が起こるかを確認します。開発中にこのような問題に遭遇する可能性があります。候補者が自分ですべてを解決できなくても、候補者がこれらの問題にどのように対処するかを知っておくと便利です。
例:次の30分間、候補者をサイレントモードにしたくない!彼が理性的な質問を考え出すことができるかどうかを確認し(要件を参照)、彼がそれを実行できないことに気づいたらすぐに考え始めるかどうかを確認します。「同僚に電話をかけるオプションを使用できますか?」のような「楽しい」反論でも。良い兆候です。
答え方
一般的に、この種の質問に答えることができる最良の答えは反問です!答えをすぐに伝えることは基本的に全体を失敗させ、実際にはまったく良い答えではありません。トレード・オフ。もちろん、反論の質は候補者によって異なります。
インタビューの質問に関する一般的なメモとして:反質問はめったに悪いことではありません。私自身のインタビューの1つで、たとえば次のような質問がありました。「Xを実装する必要がある場合、そのためにC ++またはJavaを選択しますか?その理由は?」-私は単に「これら2つに限定されていますか?」と反論しました。そのような反問に対して、インタビュアーからどのような反応を得るか、そしてインタビュアーに何ができるかを実際に示すことがどれほど簡単かを自分で推測してください。
find the missing element in O(N) or better
とはどういう意味ですか?これは、ループしながら、シンプルで解決されるだろう事のようなものらしいが、とにかく私は理解していない-それはどちらかだ解くかではない解決右、?