検索

。目標金額

Jan 02, 2025 pm 05:38 PM

. Target Sum

494。目標金額

難易度:

トピック: 配列、動的プログラミング、バックトラッキング

整数配列 nums と整数ターゲットが与えられます。

nums の各整数の前に記号 ' ' と '-' のいずれかを追加して、nums から を構築し、すべての整数を連結したいとします。

  • たとえば、nums = [2, 1] の場合、2 の前に「 」、1 の前に「-」を追加して、それらを連結して式「 2-1」を構築できます。

ターゲットとして評価される、構築できるさまざまな の数を返します。

例 1:

  • 入力: 数値 = [1,1,1,1,1]、ターゲット = 3
  • 出力: 5
  • 説明: 数値の合計がターゲット 3 になるようにシンボルを割り当てる方法は 5 つあります。
    • -1 1 1 1 1 = 3
    • 1 - 1 1 1 1 = 3
    • 1 1 - 1 1 1 = 3
    • 1 1 1 - 1 1 = 3
    • 1 1 1 1 - 1 = 3

例 2:

  • 入力: 数値 = [1]、ターゲット = 1
  • 出力: 1

制約:

  • 1
  • 0
  • 0
  • -1000

解決策:

「ターゲット合計」問題では、配列 nums 内の数値を使用して式を作成し、各数値にまたは - 記号を割り当てます。目標は、指定されたターゲットに対して評価されるそのような式の数を計算することです。この問題は、動的プログラミングまたはバックトラッキングを使用して効率的に解決できます。

重要なポイント

  1. 入力制約:
    • 配列の長さ: 1
    • 要素の値: 0
    • ターゲット範囲: -1000
  2. 出力:

    • ターゲットに評価される式の数を返します。
  3. 課題:

    • ソリューションは、ターゲットの小さい値と大きい値の両方を処理する必要があります。
    • バックトラッキングを使用する場合、最大 220 の組み合わせを効率的に処理します。

アプローチ

この問題は、動的プログラミング (サブセット合計変換) または バックトラッキング を使用して解決できます。以下では、効率化のために 動的プログラミング (DP) を使用します。

主な所見:

  1. 数値を P (正の部分集合) と N (負の部分集合) の 2 つのグループに分割すると、次のようになります: target = sum(P) - sum(N)

項を並べ替えます: sum(P) sum(N) = sum(nums)

S を正の部分集合の合計とします。次に、Sを実行します。 = (合計(数値) ターゲット) / 2

  1. (sum(nums) target) % 2 ≠ 0 の場合、合計を分割することは不可能であるため、0 を返します。

計画

  1. 数値の合計を計算します。
  2. S の式を使用して、目標が達成可能かどうかを確認します。無効な場合は 0 を返します。
  3. DP アプローチを使用して、合計が S に等しいサブセットの数を num 単位で求めます

このソリューションを PHP で実装してみましょう: 494。目標金額

<?php /**
 * @param Integer[] $nums
 * @param Integer $target
 * @return Integer
 */
function findTargetSumWays($nums, $target) {
    ...
    ...
    ...
    /**
     * go to ./solution.php
     */
}

// Example usage:
$nums = [1, 1, 1, 1, 1];
$target = 3;
echo findTargetSumWays($nums, $target); // Output: 5
?>

説明:

  1. 入力検証:

    • S = (sum(nums) target) / 2 を計算します。
    • S が整数でない場合、nums を 2 つのサブセットに分割することは不可能です。
  2. 動的プログラミング ロジック:

    • dp[j] は、指定された数値を使用して合計 j を形成する方法の数を表します。
    • dp[0] = 1 から始めて、nums の数値ごとに、j - num を形成するウェイの数を追加して dp[j] を更新します。
  3. 結果:

    • すべての数値を処理した後、dp[S] には目標合計を達成する方法の数が含まれます。

チュートリアルの例

入力: 数値 = [1, 1, 1, 1, 1]、ターゲット = 3

  1. totalSum = 5、S = (5 3) / 2 = 4.
  2. DP 配列を初期化します: dp = [1, 0, 0, 0, 0].
  3. 各数値を処理します:
    • 1 の場合: dp を更新: [1, 1, 0, 0, 0].
    • 1 の場合: dp を更新: [1, 2, 1, 0, 0]。
    • 1 の場合: dp を更新: [1, 3, 3, 1, 0].
    • 1 の場合: dp を更新: [1, 4, 6, 4, 1]。
    • 1 の場合: dp を更新: [1, 5, 10, 10, 5]。
  4. 結果: dp[4] = 5.

時間計算量

  • 時間: O(n x S)、n は nums の長さ、S はターゲットの合計です。
  • スペース: DP 配列の場合は O(S)。

出力例

入力: 数値 = [1,1,1,1,1]、ターゲット = 3

出力: 5

このアプローチは、動的計画法を使用して目標合計を形成する方法の数を効率的に計算します。問題をサブセット合計に削減することで、DP の構造を活用してパフォーマンスを向上させます。

連絡先リンク

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

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

  • LinkedIn
  • GitHub

以上が。目標金額の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
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

PHPアプリケーションをより速くする方法PHPアプリケーションをより速くする方法May 12, 2025 am 12:12 AM

tomakephpapplicationsfaster、followthesesteps:1)useopcodecachinglikeopcacheTostoredscriptbytecode.2)最小化abasequeriesecachingingindexing.3)leveragephp7機能forbettercodeefficiency.4)

PHP依存性インジェクション:コードのテスト可能性を改善しますPHP依存性インジェクション:コードのテスト可能性を改善しますMay 12, 2025 am 12:03 AM

依存性注入(DI)は、明示的に推移的な依存関係によりPHPコードのテスト可能性を大幅に改善します。 1)DI分離クラスと特定の実装により、テストとメンテナンスが柔軟になります。 2)3つのタイプのうち、コンストラクターは、状態を一貫性に保つために明示的な式依存性を注入します。 3)DIコンテナを使用して複雑な依存関係を管理し、コードの品質と開発効率を向上させます。

PHPパフォーマンスの最適化:データベースクエリの最適化PHPパフォーマンスの最適化:データベースクエリの最適化May 12, 2025 am 12:02 AM

DatabaseQueryoptimizationInpholvesseveralstrategESTOEnhancePerformance.1)selectonlynlynlyndorycolumnStoredatedataTransfer.2)useindexingtospeedupdataretrieval.3)revenmecrycachingtostoreres sultsoffrequent queries.4)

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 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

WebStorm Mac版

WebStorm Mac版

便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境