面接の準備をしています。私が得た質問は次のとおりです: 2 つの数値は、リンクされたリストで表され、各ノードには 1 つの数字が含まれます。数字は、1 の数字がリストの先頭になるように、逆順に格納されます。2 つの数値を加算し、合計を連結リストとして返す関数を作成します。提案された回答は、各数字を個別に追加し、「キャリー」番号を保持します。たとえば、2 つの数字の最初の桁が「5」と「7」の場合。アルゴリズムは、結果の合計の 1 桁目に「2」を記録し、「1」を「キャリー」として保持して、結果の 10 桁目に加算します。ただし、私の解決策は、2 つのリンクされたリストをトラバースし、それらを 2 つの整数に変換することです。次に、数値を追加し、合計を新しい連結リストに変換します。だろう 私のソリューションはより簡単で効率的ですか? ありがとう!
3 に答える
(「整数」とは、あなたが意味すると仮定しますint
。)
int
元のソリューションは使用可能なメモリの量によってのみ制限されますが、ソリューションは に収まる数を超えてスケーリングしません。
効率に関する限り、元のソリューションよりも効率的なソリューションはありません。
確かに、あなたのソリューションはより簡単に記述できます。大規模なチームで作業する場合、特定の状況では、ソリューションが生成するコードの可読性が望ましいという議論がなされるかもしれません。
ただし、ほとんどの場合、彼らが提案する答えは、メモリ効率がはるかに高く、おそらく CPU 効率が高いものです。
最初のリンクリストを調べて、それを数値として保存することを提案しています (+1 ストア)。秒を通過し、数値として保存します (+1 ストア)。2 つの数値を加算し、結果を保存します (+1 ストア)。この番号を連結リストに変換して保存(+1ストア)
彼らの解決策は、1 番目と 2 番目のリンクされたリストを調べながら、3 番目に書き込み、それを新しいリスト (+1 ストア) として保存することです。
これは +1 ストアであり、あなたの +4 ストアです。これは大したことではないように思えるかもしれませんが、(分散システムなどで) 同時に n ペアの数を追加しようとすると、n 店舗ではなく 4n 店舗を見ていることになります。これは大きな問題になる可能性があります。