ByteDance アルゴリズムの面接の質問、解けますか?

ByteDance アルゴリズムの面接の質問、解けますか?

数日前、私の友人がByteDanceの面接を受けました。面接官は彼にリンクリストアルゴリズムの質問をしましたが、彼はすぐには理解できなかったので私に尋ねました。この質問はかなりいいと思うので、それについて話します。

[[275586]]

01 タイトル

これは実際には変形されたリンクリストの反転問題であり、大まかに次のように説明できます。

単一リンクリストのヘッドノードが与えられた場合、リストを調整して K 個のノードすべてが逆順にグループ化されるようにする関数を実装します。リンクリストの末尾から始めて、ヘッドに残っているノードの数がグループを形成するのに十分でない場合は、順序を逆にする必要はありません。 (キューやスタックを補助として使用することはできません)。

例えば:

  • リンクリスト: 1->2->3->4->5->6->7->8->null、K = 3。すると、6->7->8、3->4->5、1->2 はそれぞれグループになります。調整後:1->2->5->4->3->8->7->6->null。このうち、1と2は1グループに足りないため調整しません。

02 回答

この問題の難しさは、リンク リストの先頭からではなく末尾から開始することです。先頭であれば、リンク リストをトラバースして、k 回のトラバースごとにグループに分割し、順序を逆にすることができるため、比較的簡単に実行できます。しかし、これは最後とは異なります。なぜなら、これは単方向リンク リストであり、逆方向にトラバースして最初からやり直すことができないからです。ただし、この問題は再帰を使用すると間違いなく簡単に解決できます。

まずは同じような逆の質問をしてみましょう。

この問題を解く前に、先頭から始める場合に何をすべきかを見てみましょう。例: リンク リスト: 1->2->3->4->5->6->7->8->null、K = 3。調整後:3->2->1->6->5->4->7->8->null。このうち、7と8は1グループに足りないため調整されません。

この問題を解決するには再帰を使用することができます。reverseKNode() メソッドの機能は、単方向リンク リスト内の K 個のノードの順序を (先頭から) 逆にすることであると仮定します。reverse() メソッドの機能は、単方向リンク リストを逆にすることです。

したがって、次の単一リンクリストの場合、K = 3 になります。

最初の K 個のノードを次のノードから分離します。

temp が指す残りのリンク リストは、元の問題のサブ問題であると言えます。 temp が指すリンク リスト内の K 個のノードすべての順序を逆にするには、reverseKNode() メソッドを呼び出します。次に、reverse() メソッドを呼び出して、head が指す 3 つのノードの順序を逆にします。結果は次のようになります。

次に、これら 2 つの部分を接続するだけです。最終結果は次のとおりです。

コードは次のとおりです。

話題に戻る

これら 2 つの質問は、1 つは最初から始まり、もう 1 つは最初から始まるという点を除けば、非常によく似ていると言えます。これは、leetcode の質問 25 でもあります。面接では、質問が歪んでいることがよくあります。たとえば、ByteDance からのこの質問では、質問が最後から組み立てられており、一瞬何をすればいいのかわからないかもしれません。もちろん、誰かがすぐに反応して彼を即座に殺す可能性もあります。

実際、この問題は非常に簡単に解決できます。単方向リンク リストを 1 回反転するだけです。反転後、先頭からアセンブルするように変換できます。次に、上記の私の解決策に従ってください。処理後、結果をもう一度反転すると完了します。 2 度反転すると反転しないのと同じになります。

例えばリンクリスト(K = 3)の場合

最後から始めて、逆の順序で K 個のノードをグループ化します。手順は次のとおりです。

①まずは逆順

順序を逆にした後、先頭から始めて各 K ノードの順序をグループとして逆にするという問題に変換できます。

②処理後の結果は以下のようになります。

③ 次に結果を1回反転すると、結果は次のようになります。

コードは次のとおりです。

この問題と同様に、まず 2 つのリンク リストを逆の順序で追加する必要があります。この質問は、ByteDance の筆記試験でも出題されており、下の図の 2 番目の質問に示されています。

この問題では、まず 2 つのリンク リストを逆にし、次にノードを追加し、最後にそれらをマージする必要があります。

03 結論

リンクリストアルゴリズムの質問に関しては、面接でよくテストされると聞いているので、より注意を払うことができます。この記事が参考になったと思ったら、ぜひ高評価を付けてください。

<<:  AIによる顔の改造の一般的な手法の詳細な説明

>>:  制御可能な人工知能には未来がある

ブログ    
ブログ    

推薦する

...

なぜアルゴリズムを犬のように飼いならすのか

[[114872]]進化人類学者の間では、子犬などのペットが野生動物から進化したのは、社会的な知性を...

人工知能によって破壊される可能性のある7つの業界

[[417720]]人工知能は最先端の技術から人々の日常生活に組み込まれる技術へと急速に進化していま...

Java プログラミング スキル - データ構造とアルゴリズム「分割統治アルゴリズム」

[[398991]]アルゴリズムの紹介分割統治アルゴリズムは非常に重要です。文字通りの説明は「分割...

ドローンの将来の用途

ドローンは、1960年代以降、政府と軍隊によるインテリジェントな戦闘装備の需要から生まれました。米軍...

毎日のアルゴリズム: 上位 K 個の高頻度要素

空でない整数の配列が与えられた場合、最も頻繁に出現する上位 k 個の要素を返します。例1:入力: n...

世界最大のチップは、1億6,300万コアのクラスター構成で「人間の脳レベル」のAIモデルを実現します。

今朝早く、Cerebras Systems は世界初となる人間の脳規模の AI ソリューションのリリ...

ボストンダイナミクスのスポットが工場に入り、作業を開始しました!現代自動車はそれを夜間警備に配備し、工場の安全管理官に変身させる

ボストン・ダイナミクスのロボットは見た目はかっこいいのですが、使い道がないので、好評は得られても人気...

報告書によると、プログラマーの70%がプログラミングにさまざまなAIツールを使用している。

6月14日、プログラミングに関する質問と回答のウェブサイト「Stack Overflow」が発表し...

「翼竜」が飛び立ち、その威力を発揮。固定翼ドローンについて、あなたはどのくらい知っていますか?

空を飛ぶ龍、数千マイル離れたところから救援に駆けつける!最近、「翼龍」無人機が飛び立ち、被災地に急行...

世界のトラフィック量上位50のAIウェブサイトが発表:ChatGPTなどの会話型製品が目立ち、ユーザーは主にライトな体験を利用

米国のベンチャーキャピタル企業a16zは10月9日、Cエンドユーザーに公開されている現在市場に出回っ...

...

GPTストアはオンラインになるとすぐに混乱に陥り、偽造品、偽のトラフィック、禁止されたコンテンツが次々と出現します

新しくオープンしたGPTストアが「混沌」していることで有名になるとは思ってもいませんでした。見てくだ...

機械翻訳から読心術まで、AIは人類のバベルの塔を再建できるのか?

聖書の旧約聖書創世記には、人類が団結して天国に通じるバベルの塔を建てたという話があります。この計画を...