}}上記のコードに関して以下の質問があります。arr){私はこれらの名前が好きではありません。それが言われているのなら私はむしろ配列を書きたいと思います。配列の略語であることを理解する必要はありません。配列よりももっと説明的です。そのため、ここでは名前に基づいて異なる値を保持する3つの変数があります。その関係を強制するデータ型、配列があります。1];今、あなたはより再利用可能な方法を持っています。0、1、2の配列を並べ替えるだけではなくなりました。任意の配列を並べ替えることができます。それは今自己組織化しています。展開する必要がなくなりました。それ以外は、両方とも同じスペースを使用します。モンスターを単純な配列の更新で置き換えることによるエラーの減少を補う以上のものです。配列に0、1、または2以外の数が含まれている場合、オリジナルにはバグがあります。それ以外の数は暗黙のうちに2として数えられます。修正版では、配列の範囲外の例外がスローされます。あなたの側で追加のチェックなしでそうしてください。別のコメントあなたは言う問題の説明によると、ソートされた要素を配列に明示的に格納する必要はないと考えていたので、それらを印刷するだけで済みました。配列を使用することはスペースのオーバーヘッドになると思いました。その場合、配列は元の配列を複製し、スペースオーバーヘッドでした。そこで得られるのは、作成した配列を他のものに再利用できるということです。あなたは、現在の問題の記述が別の行動と表示を必要としないことを指摘するのは正しいです。私たちがあなたに伝えようとしているのは、現実の世界では、問題の記述が変わるということです。あなたのコードは壊れやすいです。問題の記述が変わった場合は、それを書き直す必要があります。目標が変わっても機能し続ける堅牢なコードを書くことをお勧めします。これは、プロジェクトの目標が大きく変わる傾向があるためです。said:本当の問題は、プログラマが間違った場所や間違った時に効率について心配するのにあまりにも多くの時間を費やしたことです。時期尚早の最適化は、プログラミングにおけるすべての悪(または少なくともその大部分)の根本です。あなたは一般的に良いエンジニアリング原則のために書くことをお勧めしますそしてそれから、それが重要であるそれらのまれな例では、最適化します。ユーザーの要求がそれらをくまなく踏み込むので、あなたの最適化された解決策に恋をしないでください。各要素の数を印刷するように求められた場合はどうなりますか?そのためには、このコードを修正する必要があります。}それからあなたは簡単にカウントや配列を表示することができます。その情報がすぐそこにあるからです。元の方法では、このように書き直すか、その表示を行うために要素を再カウントする必要があります。元の方法はその情報をすぐに破棄するためです。元の方法を変更することもできます。誰かが数え切れない配列だけが欲しいと言うとどうなりますか?一般的に、複数のことを行うより複雑な方法よりも、1つのことを行う小さな方法、1つだけを行う方法が優先されます。これは、生成と表示が混在する場合に特に当てはまります。同じ基本データの上に複数の表示を要求することが非常に一般的であることがわかったので、これはかなり頻繁に失敗します。そのため、異なるアクションを別々にしておくための、より一般的なルールの特定の例(生成と表示を混在させないでください)があります。System.out.println(Arrays.toString(sorted));最後の行がソートされた配列を表示していることを知る必要がないことに注意してください。配列が何であれ、表示されます。カウントから直接機能する特別な表示ルーチンを書くことで、おそらくパフォーマンスを向上させることができます。それほど多くの改善ではないでしょう。ほとんどの場合、それは関係ありません。入力例では、時差はごくわずかです。プログラムを実行するよりもコンパイルに時間がかかります。使うのですか?結果として得られる配列は巨大になる可能性があり、あなたは2つの配列、1つは文字列、もう1つは整数の配列に自分自身をコミットしています。}これにより、2つの配列と1つの文字列が節約され、1つの小さな配列が犠牲になります。本当にスペースが限られている場合は、このように入力と生成を混在させる方が、生成と出力を混在させるよりも優れています。これがあなたのオリジナルより遅いということはかなり可能です。これは一般的なトレードオフであり、スペースのスピードです。8では、(スタックオーバーフローから)のようなものを使用できます。System.out.println();これは4つのprintステートメントだけで表示されます。それがあまりにも多くのスペースを使用する場合(一時的なコレクションを作成するかどうかは私にはわかりません)、元の出力方法を使用してください。それは遅いかもしれませんが、それは非常に小さなスペースを使用します。この種の最適化は、必要であることを確認した後にすべきことです。ほとんどの場合、これは不要になり、生産性が低下することさえあります。あなたが実際に時間的に制約されているときにあなたがスペースの制約について心配しているならば。McDougall-Collins源あなたの優れた提案をたくさんありがとう。これは私がこれまでに受け取った中で最も重要なアドバイスです。誰もこれを学校や資格で教えることはなく、あなたはあなたの答えを書くために多くの努力を払ってきました。RoToRa、チェックしてみましょう。toArrayを呼び出さない限り)。)内部的には含まれている要素とサイズを格納するだけで、他のすべてを「シミュレート」します。源あなたが実装したカウントソートは間違いなく進むべき道です。コードを少し整理します。ステートメントを書くと、ややきれいなバイトコードが生成されます。input.出力の各行には、最後の数字の後に末尾のスペースが付きます。それはあなたの解決策がいくつかのテストに失敗する原因になるかもしれません。使用することをお勧めします。wjv源あなたの提案をありがとう。問題文によれば、ソートされた要素を配列に明示的に格納する必要はないと考え、それらを表示するだけにしました。配列を使用することはスペースのオーバーヘッドになると思いました。源それが正しいアプローチです。したがって、時間やスペースの複雑さを大幅に改善できるとは思いません。個々の変数ではなく配列を使用してカウントを格納することで、関数の再利用性を向上させることができます。System.out.println();}また、上記で変更したように、変数名と関数名をわずかに省略することには意味がありません。追加の明快さは2文字長くなる価値があります。このような関数は、ソートと印刷をくっつけるのではなく、より一般的には、配列を所定の位置に再配置するか、別のソートされた配列を返します。このプログラムのためにそれはそれが必要とすることをするが、一般的に言えばそれはあなたの論理をあなたの出力から切り離すのが良い。Errratatz、提案をありがとう。私は簡潔でシンプルなコードのファンです。Streamsがすでに印刷に使用されている場合は、なぜそれらも一緒にソートしないでください。変換およびその逆の変換は不要です。入力に1桁しかない場合にのみ機能します。'N'を個別に必要としないことです。これがあなたが望むことをしている完全なコードになるでしょう。ようなオブジェクトは常に閉じるべきです。printing?機能をシンプルにしてください。関数は単一の論理演算を実行する必要があります。それはあなたの実体が理解し、テストし、そして再利用することをより簡単にすることを可能にします。0でも1でもない要素は、デフォルトで2になりますか。この問題を解決するもっと良い方法はありますか?時間と空間の複雑さをさらに改善できますか?あなたのユースケースに依存します(測定!)。3-wayカウンティングソートの他に、ピボットを取り、配列をピボットよりも小さい、等しい、または大きいグループに分割する3方向パーティション(クイックソート)も可能です。