文字列配列から A 0 と B 1 で構成される最長のサブセットの長さを見つけます。
この問題では、最大でも A 0 と B1 を含む最長のサブセットを見つける必要があります。必要なのは、配列要素を使用して考えられるすべてのサブセットを見つけ、最大でも A 0 と B1 を含む最長のサブセットを見つけることだけです。
このチュートリアルでは、まず問題を解決するための再帰的手法を学習します。その後、動的プログラミング手法を使用してコードを最適化します。
問題文 - N 個のバイナリ文字列を含む配列が与えられています。さらに、A と B の整数が与えられます。指定されたバイナリ文字列を使用して、A 0 と B1 より多くが含まれないように最長のサブセットを作成する必要があります。
###例### リーリー リーリーイラスト
最長のサブセットは { "0", "0", "1"} で、2 つの 0 と 1 つの 1 が含まれます。
リーリー リーリーイラスト
最長のサブセットは、{"0"、"101"、"0"、"1"}、3 つの 0 と 3 つの 1 です。
方法1
このセクションでは、再帰を使用した簡単な方法を学びます。配列要素を使用して考えられるすべてのサブセットを構築し、A 0 と B 1 を含む最長のサブセットを見つけます。
###アルゴリズム###ステップ 1
- - countZeros() 関数を定義して、指定されたバイナリ文字列内のゼロの合計数をカウントします。
-
-
-
-
-
-
-
-
-
-
-
-
-
###例### リーリー ###出力### リーリー 時間計算量 - N 個の配列要素を使用してすべての可能なサブセットを見つけるため、O(2N)。
空間の複雑さ - O(1)
方法 2
このセクションでは、上記の方法を最適化しました。この問題を解決するために、私たちは動的プログラミング手法を使用します。問題の時間の複雑さを軽減するために、前の状態の結果を保存します。
###アルゴリズム###ステップ 1
- 上記のメソッドで行ったのと同じように、特定のバイナリ文字列内のゼロの総数をカウントする countZeros() 関数を定義します。
ステップ 2
- - サイズ A x B x N の 3 次元ベクトルを作成して、前の状態の結果を保存します。リストでは、合計 0 が A に等しく、1 が B に等しい場合、インデックス "I" にサブセットの長さを格納します。さらに、それを引数として getMaxSubsetLen() 関数に渡します。
-
-
-
-
-
-
###例### リーリー ###出力### リーリー 時間計算量 - O(A*B*N)、結果を取得するには 3D リストにデータを入力する必要があるため。
動的プログラミング手法に 3D リストを使用するため、空間複雑度 - O(A*B*N)。
以上が文字列配列から A 0 と B 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)

ホットトピック









SPLIT() 関数は、指定された区切り文字によって文字列を配列に分割し、各要素が元の文字列の区切り文字で区切られた部分である文字列の配列を返します。使用法には、コンマで区切られた値のリストを配列に分割する、パスからファイル名を抽出する、電子メール アドレスをユーザー名とドメインに分割するなどが含まれます。

Java で文字列を並べ替える方法: Arrays.sort() メソッドを使用して、文字列の配列を昇順に並べ替えます。 Collections.sort() メソッドを使用して、文字列のリストを昇順に並べ替えます。文字列のカスタム並べ替えには Comparator インターフェイスを使用します。

C 言語では、\0 は文字列の終了マークであり、ヌル文字またはターミネータと呼ばれます。文字列はバイト配列としてメモリに格納されるため、コンパイラは \0 を介して文字列の末尾を認識し、文字列が正しく処理されることを保証します。 \0 仕組み: コンパイラは \0 に遭遇すると文字の読み取りを停止し、それ以降の文字は無視されます。 \0 自体はストレージ領域を占有しません。利点としては、信頼性の高い文字列処理、効率の向上 (終端を見つけるために配列全体をスキャンする必要がない)、比較と操作の容易さが挙げられます。

args は Java のコマンド ライン引数を表し、プログラムの起動時にプログラムに渡される引数のリストを含む文字列の配列です。これは main メソッドでのみ使用でき、デフォルト値は空の配列で、各パラメーターはインデックスによってアクセスできます。 args は、プログラムの開始時に入力データを構成または提供するためにコマンド ライン引数を受け取って処理するために使用されます。

args は Java の main メソッドの特別なパラメータ配列で、コマンド ライン パラメータまたは外部入力の文字列配列を取得するために使用されます。 args 配列にアクセスすることで、プログラムはこれらの引数を読み取り、必要に応じて処理できます。

C言語プログラミングソフトウェアに漢字ソート機能を実装するにはどうすればよいですか?現代社会において、漢字ソート機能は多くのソフトウェアに欠かせない機能の一つとなっています。ワープロ ソフトウェア、検索エンジン、データベース システムのいずれにおいても、中国語のテキスト データをより適切に表示および処理するには、中国語の文字を並べ替える必要があります。 C言語プログラミングで、漢字ソート機能を実装するにはどうすればよいですか?一つの方法を以下に簡単に紹介します。まず、C言語で漢字ソート機能を実装するには、文字列比較関数を使用する必要があります。ラン

AI テクノロジーと PHP の機能を組み合わせて、アプリケーションの機能を強化しました。具体的な AI アプリケーションには、Naive Bayes などの機械学習アルゴリズムを使用したテキストの分類が含まれます。単語のセグメンテーションやステミングなどの自然言語処理技術を使用して、詳細なテキスト分析を実行します。

C++ プログラムのパフォーマンスに対する関数の影響には、関数呼び出しのオーバーヘッド、ローカル変数、およびオブジェクト割り当てのオーバーヘッドが含まれます。 関数呼び出しのオーバーヘッド: スタック フレーム割り当て、パラメーター転送、および制御転送が含まれます。これは、小規模な関数に大きな影響を与えます。ローカル変数とオブジェクト割り当てのオーバーヘッド: ローカル変数やオブジェクトの作成と破棄が大量に行われると、スタック オーバーフローやパフォーマンスの低下が発生する可能性があります。
