検索
ホームページバックエンド開発PHPチュートリアル要素を交換して、辞書編集的に最小の配列を作成します

Make Lexicographically Smallest Array by Swapping Elements

2948。要素を交換して辞書順に最小の配列を作成

難易度:

トピック: 配列、結合検索、ソート

正の 整数の 0 インデックス 配列と正の整数制限が与えられます。

1 回の操作で、任意の 2 つのインデックス i と j を選択し、nums[i] と nums[j] を入れ替えることができます。if |nums[i] - nums[j]|

操作を何回でも実行することで取得できる 辞書編集上最小の配列を返します

配列 a は、a と b が異なる最初の位置に、配列 a の要素が b の対応する要素よりも小さい場合、辞書編集的に配列 b より小さくなります。たとえば、配列 [2,10,3] は、インデックス 0 と 2

例 1:

  • 入力: 数値 = [1,5,3,9,8]、制限 = 2
  • 出力: [1,3,5,8,9]
  • 説明: 操作を 2 回適用します:
      nums[1] を nums[2] と交換します。配列は [1,3,5,9,8]
    • になります。
    • nums[3] を nums[4] と交換します。配列は [1,3,5,8,9]
    • になります。
    • これ以上操作を適用しても、辞書編集的に小さい配列を取得することはできません。
    • 異なる操作を実行しても同じ結果が得られる可能性があることに注意してください。

例 2:

  • 入力: 数値 = [1,7,6,18,2,1]、制限 = 3
  • 出力: [1,6,7,18,1,2]
  • 説明: 操作を 3 回適用します。
      nums[1] を nums[2] と交換します。配列は [1,6,7,18,2,1]
    • になります。
    • nums[0] を nums[4] と交換します。配列は [2,6,7,18,1,1]
    • になります。
    • nums[0] を nums[5] と交換します。配列は [1,6,7,18,1,2]
    • になります。
    • これ以上操作を適用しても、辞書編集的に小さい配列を取得することはできません。

例 3:

  • 入力: 数値 = [1,7,28,19,10]、制限 = 3
  • 出力: [1,7,28,19,10]
  • 説明: [1,7,28,19,10] は、2 つのインデックスに演算を適用できないため、取得できる辞書編集上の最小の配列です。

例 4:

  • 入力: 数値 = [1,60,34,84,62,56,39,76,49,38]、制限 = 4
  • 出力: [1,56,34,84,60,62,38,76,49,39]

制約:

    1 5 1 9 1 9

ヒント:

  1. numのすべての要素がノードであり、条件を満たすペアがそれらの間にエッジを持っている仮想グラフを構築します。
  2. すべてのエッジを構築する代わりに、接続されたコンポーネントのみを気にします。 dsu?
  3. を使用できますか
  4. sort nums。ここで、連続した要素が同じ接続コンポーネントに属しているかどうかを確認するためのエッジがあるかどうかを考慮する必要があります。したがって、すべての接続されたコンポーネントは、並べ替え後に位置となる要素のリストになります。
  5. 0からnums.length -1のnumsの各インデックスについて、接続されたコンポーネントにある現在の最小値に変更し、接続されたコンポーネントからその値を削除できます。
  6. 解決策:
問題は、条件の対象となる配列の要素を交換することにより、

辞書学的に最小のアレイを見つけるように求めています。具体的には、それらの間の絶対差(nums [i] - nums [j] |)が与えられた制限以下である場合、2つの要素nums [i]とnums [j]を交換することができます。

キーポイント

辞書編集順序:アレイAは、最初の異なるインデックスでa [i]< b [i]。

    スワッピング条件
  1. :スワップは、スワップされている数値の差が≤slime。の場合にのみ許可されます。
  2. Efficive Grounging
  3. :Disjoint Set Union(dsu)または並べ替え手法を使用することにより、有効なスワップで接続された要素をグループ化できます。
  4. 最適な配置
  5. :各グループについて、インデックスと値を並べ替えて最小の順序を達成します。 アプローチ
  6. constructグループ
  7. :配列を仮想グラフとして扱い、有効なスワップがエッジを定義します。ソートを使用して、接続グループまたはDSUを識別してインデックスを効率的にグループ化します。

並べ替えグループ:接続されたインデックスの各グループ内で、要素を辞書的順序で再配置します。

出力構造
    :ソートされた値をそれぞれの位置に戻します。
  1. 計画
  2. 抽出(値、インデックス)ペアでペアを使用してソートして、効率的なグループ検出を可能にします。
  3. 並べ替えられた値を繰り返して、限界条件に基づいて接続されたインデックスのグループを形成します。 各グループの場合: インデックスと値を独立してソートします。
値を辞書編集順に元の位置に再割り当てします。

修正された配列を返します。
  1. このソリューションをPHP:
  2. 2948に実装しましょう。要素を交換して、辞書編集的に最小のアレイを作成します
    • 説明:
  3. 抽出と並べ替え(g​​etNumandIndexes):
  • 簡単に参照できるように、値とインデックスをペアに組み合わせます。
  • ペアを値で並べ替えると、連結コンポーネントを効率的にグループ化できます。
  • グループ化ロジック:

    • ソートされたペアをスキャンします。連続する値の差が制限値以下の場合は、それらを同じグループに追加します。それ以外の場合は、新しいグループを開始します。
  • 並べ替えと再割り当て:

    • 各グループについて:
      • インデックスと値を抽出します。
      • 両方のリストを並べ替えて、最小の値が最小のインデックスに配置されるようにします。
      • 並べ替えられた値を回答配列内のそれぞれの位置に再割り当てします。
  • 結果の構築:

    • すべてのグループを処理した後、更新された配列を返します。
  • チュートリアルの例

    例1

    入力: 数値 = [1,5,3,9,8]、制限 = 2

    1. 抽出と並べ替え:

      • ペア: [(1, 0), (5, 1), (3, 2), (9, 3), (8, 4)]
      • ソートされたペア: [(1, 0), (3, 2), (5, 1), (8, 4), (9, 3)]
    2. グループ化:

      • グループ 1: [(1, 0)]
      • グループ 2: [(3, 2), (5, 1)]
      • グループ 3: [(8, 4), (9, 3)]
    3. グループの並べ替え:

      • グループ 1: 変更なし ([1])
      • グループ 2: 値 = [3, 5]、インデックス = [1, 2] → 結果: [1, 3, 5]
      • グループ 3: 値 = [8, 9]、インデックス = [3, 4] → 結果: [8, 9]
    4. 最終結果: [1, 3, 5, 8, 9]

    時間計算量

    1. ソート: nums 配列のソートには O(n log n) がかかります。
    2. グループ化: ソートされた配列の線形走査には O(n) がかかります。
    3. グループの並べ替え: 各グループのインデックスと値の並べ替えには、O(k log k) がかかります。kグループのサイズです。すべてのグループを合計すると、O(n log n) となります。

    全体の時間計算量: O(n log n)

    例の出力

    例 2

    入力: 数値 = [1,7,6,18,2,1]、制限 = 3

    出力: [1,6,7,18,1,2]

    例 3

    入力: 数値 = [1,7,28,19,10]、制限 = 3

    出力: [1,7,28,19,10]

    このアプローチは、並べ替えを使用して接続されたコンポーネントを特定し、各コンポーネント内の値を再配置して辞書編集的に最小の配列を実現することで、問題を効率的に処理します。並べ替えとグループ処理を活用することで、O(n log n) の複雑さを持つ最適なソリューションを保証します。

    連絡先リンク

    このシリーズが役立つと思われた場合は、GitHub で リポジトリ にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!

    このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:

    • LinkedIn
    • GitHub

    以上が要素を交換して、辞書編集的に最小の配列を作成しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    トラフィックの高いウェブサイトのPHPパフォーマンスチューニングトラフィックの高いウェブサイトのPHPパフォーマンスチューニングMay 14, 2025 am 12:13 AM

    thesecrettokeepingaphp-poweredwebsterunningsmootlyunderheavyloadinvolvesseveralkeystrategies:1)emform opcodecoduceSciptionexecutiontime、2)aatabasequerycachingwithiThing withiThistolessendavasoload、

    PHPでの依存関係注射:初心者向けのコード例PHPでの依存関係注射:初心者向けのコード例May 14, 2025 am 12:08 AM

    コードをより明確かつ維持しやすくするため、依存関係が関心(DI)に注意する必要があります。 1)DIは、クラスを切り離すことにより、よりモジュール化されます。2)テストとコードの柔軟性の利便性を向上させ、3)DIコンテナを使用して複雑な依存関係を管理しますが、パフォーマンスの影響と円形の依存関係に注意してください。

    PHPパフォーマンス:アプリケーションを最適化することは可能ですか?PHPパフォーマンス:アプリケーションを最適化することは可能ですか?May 14, 2025 am 12:04 AM

    はい、最適化されたAphPossibleandessention.1)CachingingusapCutoredatedAtabaseload.2)最適化、効率的なQueries、およびConnectionPooling.3)EnhcodeCodewithBultinctions、Avoididingglobalbariables、およびUsingopcodeching

    PHPパフォーマンスの最適化:究極のガイドPHPパフォーマンスの最適化:究極のガイドMay 14, 2025 am 12:02 AM

    keyStrategIestsoSificlyvoostphpappliceperformanceare:1)useopcodecachinglikeToreexecutiontime、2)最適化abaseの相互作用とプロペラインデックス、3)3)構成

    PHP依存性噴射コンテナ:クイックスタートPHP依存性噴射コンテナ:クイックスタートMay 13, 2025 am 12:11 AM

    aphpDependencyInjectionContaineriSATOULTAINATINAGECLASSDEPTINCIES、強化測定性、テスト可能性、および維持可能性。

    PHPの依存噴射対サービスロケーターPHPの依存噴射対サービスロケーターMay 13, 2025 am 12:10 AM

    SELECT DEPENTENCINGINOFCENT(DI)大規模なアプリケーションの場合、ServicElocatorは小さなプロジェクトまたはプロトタイプに適しています。 1)DIは、コンストラクターインジェクションを通じてコードのテスト可能性とモジュール性を改善します。 2)ServiceLocatorは、センター登録を通じてサービスを取得します。これは便利ですが、コードカップリングの増加につながる可能性があります。

    PHPパフォーマンス最適化戦略。PHPパフォーマンス最適化戦略。May 13, 2025 am 12:06 AM

    phpapplicationscanbeoptimizedforspeedandEfficiencyby:1)enabingopcacheinphp.ini、2)PreparedStatementswithpordatabasequeriesを使用して、3)LoopswithArray_filterandarray_mapfordataprocessing、4)の構成ngincasaSearverseproxy、5)

    PHPメールの検証:電子メールが正しく送信されるようにしますPHPメールの検証:電子メールが正しく送信されるようにしますMay 13, 2025 am 12:06 AM

    PHPemailvalidationinvolvesthreesteps:1)Formatvalidationusingregularexpressionstochecktheemailformat;2)DNSvalidationtoensurethedomainhasavalidMXrecord;3)SMTPvalidation,themostthoroughmethod,whichchecksifthemailboxexistsbyconnectingtotheSMTPserver.Impl

    See all articles

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    Video Face Swap

    Video Face Swap

    完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

    ホットツール

    SublimeText3 中国語版

    SublimeText3 中国語版

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

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 Linux 新バージョン

    SublimeText3 Linux 新バージョン

    SublimeText3 Linux 最新バージョン

    MantisBT

    MantisBT

    Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

    SAP NetWeaver Server Adapter for Eclipse

    SAP NetWeaver Server Adapter for Eclipse

    Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。