LeetCode の K 要素パターンを理解する: 基本 (パート 1)
やっと分かりました! LeetCode を学習する最善の方法は、次から次へと問題を徹底的に解いていくことではなく、場合によっては非効率的に解決するのに 1 時間もかかってしまいます。 LeetCode をマスターする鍵はパターンを学ぶことです。よくあることを勉強しましょう!
面接官は、文字列または配列内の K 個の要素の検索、維持、操作について質問するのが好きです。最初はそれぞれの問題がまったく異なるものだと思っていましたが、その後、関連性が見え始めました。このパターンを理解するのに本当に役立つ 2 つの問題について、私が何を意味するのかを説明しましょう。
問題 1: 合計が最大となる長さ K の部分列を見つけます
これは技術的には「簡単」レベルの質問 (1 社のみが質問) ですが、これらの k 要素の問題についてどのように考えるかについて多くのことを教えてくれます。
彼らが尋ねていること
数値の配列と値 k を取得します。配列から合計が最大になる k 個の数値を見つける必要があります。ただし (これが最初に私をつまずかせた部分です)、数字は元の順序に保たなければなりません!
例:
ああ!これはさらに厄介です:
わかりました
最初は、「k 個の最大の数字を取得すれば完了!」と思いました。しかし、いいえ、その注文要件によってすべてが変わります。最終的にクリックしたものは次のとおりです:
- それぞれの数字がどこから来たのかを覚えておく必要がありますよね?それで 私は、「すべての番号をその番号と組み合わせるべきだ」と考えました。 位置は?」
- 次に、これらのペアを値で並べ替えることができます (つまり、 各ペアの最初の番号)、しかし私たちは追跡しています 彼らはどこから来たのか (それが 2 番目の数字です)!
- ここからがすごいところです - これらのうち k 個だけが必要なので、 最初の k 個のペアを作成し、その位置を維持するだけです:
- 最後に、元の配列を調べて、のみを保持します セット内の位置にある番号:
コードは次のとおりです
2: ストリーム内の K 番目に大きい要素
わかりました。これも (5 社に依頼して) 「簡単」とラベル付けされていますが、私にとっては、より難しい K 番目の要素の問題よりも混乱しました。
彼らが尋ねていること
あなたが大学で働いていて、学生がテストのスコアを提出し続けていると想像してください。あなたの仕事は、いつでも k 番目に高いスコアを常に把握することです。新しいスコアが次々と追加されるので、追跡する必要があります。
彼らはあなたに k といくつかの初期スコアを与え、その後新しいスコアを投げ続け、毎回 k 番目に高いスコアを知りたがります。例を見てみましょう:
わかりました、分かったと思います
最初は、新しいスコアが入るたびに配列全体をソートしようと試み続けましたが、ソートが非効率であることはわかっています。それから、上位 k 位だけを気にしているのに、なぜすべてのスコアを追跡しているのかと考えました。
これをどのように分解したかを次に示します。
- まず、初期スコアを並べ替えて、上位 k 個だけを保持します。
- 新しいスコアが入ったら:
k 番目に大きい値 (最初の数値) より小さい場合は、無視します
それより大きい場合は、リストのどこかに含まれます
各追加で何が起こっているかは次のとおりです:
コード
これら 2 つの問題が関連している理由
どちらの問題も、k 個の要素の処理に関して非常に重要なことを教えてくれました。
- 最初の問題: 要素がどこにあるかを追跡する必要がある場合があります。 から来ました
- 2 番目の問題: k 個の要素だけを保持する必要がある場合がある あたり
これらの k 要素の問題は、どの情報を保持し、何を捨てるかを賢くすることに関するものです。
次回は、これらのアイデアに基づいたさらに 2 つの k 要素の問題を見ていきます。最後にはパターンが見えてきて、この種の問題がそれほど怖くなくなることを願っています!
以上がLeetCode の K 要素パターンを理解する: 基本 (パート 1)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

この記事では、ブラウザ開発者ツールを使用した効果的なJavaScriptデバッグについて説明し、ブレークポイントの設定、コンソールの使用、パフォーマンスの分析に焦点を当てています。

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

この記事では、ソースマップを使用して、元のコードにマッピングすることにより、Minified JavaScriptをデバッグする方法について説明します。ソースマップの有効化、ブレークポイントの設定、Chrome DevtoolsやWebpackなどのツールの使用について説明します。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...
