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による顔の改造の一般的な手法の詳細な説明

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

ブログ    

推薦する

製造業における人工知能の8つの応用シナリオ

人工知能の概念は、60年以上前の1950年代に初めて提案されました。しかし、モノのインターネット、ビ...

...

...

Microsoft Bing Chat が Chrome と Safari で利用可能になりましたが、いくつかの制限があります

Microsoft の人工知能チャットボット Bing Chat が、Google Chrome お...

...

Nvidia テルアビブ AI サミットが中止に!黄氏の社内メールが明らかに:Nvidiaの従業員も誘拐された

少し前、25歳の中国系イスラエル人少女、ノア・アルガマニの誘拐事件がネットユーザーの間で白熱した議論...

マスク氏、XデータをAIの訓練に利用していると認める「マイクロソフトは使えないが、自分なら使える」

マスク氏はついに我慢できなくなり、X のデータを AI に入力し始めました。過去 2 日間で、X が...

コードを自動生成できるAIベースの開発ツール5選

今日、機械学習の可能性に関心を持つプログラマーは、人工知能と AI ベースのソフトウェア開発ツールを...

...

...

機械学習を超簡単にする 8 つのオープンソース ツール

機械学習開発者には、プロジェクトで使用できるツールを含め、多くの機械学習リソースが必ず必要になります...

顔認識は簡単に破られるのでしょうか?虐待と闘う方法

未来産業研究所は、顔認識市場規模は今後5年間で平均23%の複合成長率を維持し、2024年までに市場規...

なぜ顔認識に嫌悪感を抱くのですか?

[[376016]] △ 2019年9月4日、ノースウェスタン工科大学の学生が顔認識装置を通じて図...

ネットセレブ列車は強制的に停止させられた。ドローンの操縦はどれほど難しいのか?

最近、「重慶の人気列車がドローンに衝突され停止」する動画がインターネット上で広く出回っている。 [[...