1

前の質問は文字列関連で、前の質問は制御の反転に関するものでした。

配列内の 2 番目に大きい要素をどのように見つけますか?

JAVA を独学/学習しているプロジェクト マネージャーとして、私の回答は次のとおりです。

大きさはどのように定義されていますか (整数? 解析: 文字列/オブジェクト? ) 配列の大きさは? バブル ソートし、最後から 2 番目のインデックスを返します。最大の変数と 2 番目から最大の変数を一時的に格納し、配列を並べ替えて適切な変数に置き換え、2 番目に大きい変数を返します。多くの方法がありますが、コストがかからない適切な関数を開発するには、より多くの情報が必要になります。範囲が非常に広い場合は、いくつかの無駄のない方法を作成し、配列の長さを測定して、適切な方法を配列に適用します。

これは質問に対する有効な回答ですか? そうでない場合は、何を改善する必要があると思いますか? 私がこの質問をしたのは、一般的な採用環境で見られる極端なギャップのためであり、同様の構造化された質問の実際の意図を理解するのが難しく、何をどのようにアプローチ/返信するかを理解するためにフィードバックが必要です.

更新通常はコードが表示されるという通知を受け取りましたが、パラメーターやガイドラインは提供されず、次のように返信されました。

少なくとも最初の 2 つの情報がわからないと、体系化された回答を提供できません。数値は普遍的にソートされますが、文字列、オブジェクト、およびその他は主観的に解析されます。配列の長さを処理する 2 番目の部分と、それが静的であるかどうかは、開発者にとって間違いなく重要です。高価なコード (ユーザーが直面する計算時間、またはクライアントのハードウェア コスト) はコストがかかる可能性があるためです。質問は、特にフィードバックがない書面形式であることを考えると、正確な技術的回答には不適切な表現になっています。個人的に尋ねられた場合と同じように、私は単に回答として考慮事項を入力しているだけです。前の質問から得られた文脈は、IoC の実践 (箇条書き 3) を理解し、トランザクション (try/catch) の可能性のある状況 (箇条書き 4) で文字列を解析する (箇条書き 2) 人を探しているということです。検索 (現在の問題)。アンケートの目的が問題へのアプローチ方法を確認することである場合、私の回答は有効です。彼らがさらに明確にしたい場合は、喜んで対応しますが、成文化された回答を必要としていて、必要なコンテキストを提供することを望まない場合、私は彼らと協力したくありません. 1 つの「簡単な」質問をされたときにガイダンスが必要であるが、最適に対応するために他の情報が必要な外部のお客様 外部の専門的な助けを求めるビジネスの背後にある中心的な理由。私は JS に熟練しているため、JAVA での単独開発がこの仕事の範囲内にあるかどうかなど、さらなる情報が必要なため、大声で返信するときの私のリズムはまったく逆であるため、この応答が厳しい口調で読まれないことを願っています。そしてPythonも同様で、これは昨日議論されませんでした. あなたとあなたのクライアントが、採用担当者の方法では、抽象化の層が多くの分野で有益である可能性があることを理解していただければ幸いです。ただし、このような状況では、直接のコミュニケーションやフィードバックがなければ、認識を妨げたり曇らせたりする可能性があります。私の回答に加えて、これを提供してください。私はJSとPythonにも熟練しているので、JAVAでの唯一の開発がこの仕事の範囲内にあるかどうかを含め、これは昨日議論されませんでした. あなたとあなたのクライアントが、採用担当者の方法では、抽象化の層が多くの分野で有益である可能性があることを理解していただければ幸いです。ただし、このような状況では、直接のコミュニケーションやフィードバックがなければ、認識を妨げたり曇らせたりする可能性があります。私の回答に加えて、これを提供してください。私はJSとPythonにも熟練しているので、JAVAでの唯一の開発がこの仕事の範囲内にあるかどうかを含め、これは昨日議論されませんでした. あなたとあなたのクライアントが、採用担当者の方法では、抽象化の層が多くの分野で有益である可能性があることを理解していただければ幸いです。ただし、このような状況では、直接のコミュニケーションやフィードバックがなければ、認識を妨げたり曇らせたりする可能性があります。私の回答に加えて、これを提供してください。

と、この回答に対して高い評価を得ました。私は本当にプログラミングの仕事に就こうとしていますが、これまで正式な経験がなく、このガイダンスは本当に役に立ちます。

4

5 に答える 5

3

この場合、インタビュアーは 2 番目に大きい要素を見つけるために本当に知りたいと思っていると思います。配列全体を並べ替える(そして 2 番目の要素を選択する) 必要がありますか、それともより良い方法がありますか?

答えは、上位 k 要素を見つけるために配列全体をソートする必要はないということです。並べ替えには O(nlgn) 時間かかりますが、上位 k 個のアイテムを見つけるには O(nlogk) しかかかりません。

簡単な例を使って答えを説明できます。100 枚のカードの中で 2 番目に大きいカードを見つけなければならない場合、数字が低いものから高いものまであります。カードはソートされていません。2 番目に大きいカードを見つけるには、これまでに見た上位 2 枚のカードを手札に保持するだけです。新しいカードを選ぶとき、それがあなたの手札よりも大きいかどうかを確認し、そうであれば、新しい最大のものを手札の最小のものに置き換えます. このプロセスの最後に、上から 2 枚のカードを保持することになります。

編集:他の人が言ったように、バブル ソートの実行時間は最悪 O(n^2) です。お楽しみに、並べ替えのインタビューの質問に対するオバマ大統領の回答をチェックしてください。http://www.youtube.com/watch?v=k4RRi_ntQc8

于 2012-06-27T16:15:22.990 に答える
1

必要なタスクを実行するための最も効率的な方法は明らかです。配列を 1 回繰り返して「最大の」要素を探し、その間ずっと前の「最大の」要素も格納します。配列の最後にある、以前の「最大の」要素は、メソッドが返す必要がある要素です。

あなたの答えを定式化するには、2つの選択肢があります。

  • 「配列にint要素が含まれていると仮定して...」または何かに近づいて答えを始めます。
  • 未定義の isLargest() または isLarger() メソッドを使用して、そのメソッドの目的が、現在調べている要素が現在最大であるかどうかを確認することであることを説明します。
于 2012-06-27T16:00:33.580 に答える
0

これはかなり主観的ですが、率直に言って、私はあなたの質問についての質問に同意します-彼らはあなたの配列が何を含んでいるかを定義するべきでした。

あなたができることは、「配列内の要素がすべて整数であると仮定して、これが私がそれを行う方法です」のようなものを書いて、それからその仮定であなたの答えを与えます。

私は、他の追加情報の要求についても同じ手順に従います。仮定を立て、仮定を宣言してから、その仮定を念頭に置いて続行します。

于 2012-06-27T15:31:49.123 に答える
0

私の最初の直感的な反応は、ForkJoinPool を使用して実装された「Modified Merge Sort」です。それでも O(n log[n]) ですが、実際の実行時間はシリアル実装よりも高速です。

なぜクイックソートをしないのかと尋ねるかもしれませんが、それは、クイックソートの最悪のケースが O(n^2) であり、非常に大きなデータセットではうまくいかないからです。Modified Merge Sort は、より予測可能なパフォーマンスと、より優れた最悪のシナリオ O(n log[n]) を備えています。

于 2012-06-27T17:58:58.850 に答える
0

有効なようです-彼らがコードを望んでいたのではないかと心配しています。たぶん、整数を想定して、あなたが言ったことに加えて何かを書くべきだったと思います。

于 2012-06-27T15:35:40.867 に答える