目次
ここでは、2 つの方法で出力 3 を達成できます。
イラスト
arr[4] と arr[6] を削除し、すべて 0 を 1 の前に置くことができます。
指定された文字列では、すべてのゼロが 1 の前に配置されているため、指定された文字列から文字を削除する必要はありません。
- 長さ n の「0」と「1」の名前付きリストを定義します。ここで、n は size() メソッドを使用して取得できる文字列の長さです。
- 指定された文字列の最初の文字が「1」の場合は、「ones」配列の 0 番目のインデックスに 1 を格納し、それ以外の場合は 0 を格納します。
- for ループを使用して、文字列の 2 番目の要素からトラバースを開始します。 for ループでは、Ones[i] は、インデックス i の文字列の文字に基づいて、Ones[i-1] を 1 または 0 に加算して得られる値で初期化されます。
- 「zeros_right」変数を定義し、0 で初期化します。
- for ループを使用して文字列を反復処理します。文字列内のインデックス i の文字が「1」の場合、「ones_left」変数の値を 1 増やします。それ以外の場合は、「zeros_right」変数の値を 1 減らします。
ホームページ バックエンド開発 C++ バイナリ文字列ですべての 0 を 1 の前に配置するために必要な最小移動数

バイナリ文字列ですべての 0 を 1 の前に配置するために必要な最小移動数

Sep 23, 2023 pm 01:29 PM
バイナリ文字列 手数 場所と

###############問題文###

バイナリ文字列 str が与えられ、1 の前にすべての 0 を置くことができるように、文字列から最小数の文字を削除するように求められます。 バイナリ文字列ですべての 0 を 1 の前に配置するために必要な最小移動数 ###例### ###入力### リーリー ###出力### リーリー

イラスト

ここでは、2 つの方法で出力 3 を達成できます。

arr[2]、arr[3]、および arr[5]、または arr[4]、arr[6]、および arr[7] を文字列から削除できます。

###入力### リーリー ###出力### リーリー

イラスト

arr[4] と arr[6] を削除し、すべて 0 を 1 の前に置くことができます。

###入力### リーリー ###出力### リーリー

イラスト

指定された文字列では、すべてのゼロが 1 の前に配置されているため、指定された文字列から文字を削除する必要はありません。

方法1

最初の方法では、2 つの配列を使用します。最初の配列は左側にすべて 1 を格納し、もう一方の配列は右側にすべて 0 を格納します。その後、両方の配列の i 番目のインデックスに要素を追加し、最小の合計を見つけることができます。

###アルゴリズム###

ステップ 1

- 長さ n の「0」と「1」の名前付きリストを定義します。ここで、n は size() メソッドを使用して取得できる文字列の長さです。

ステップ 2

- 指定された文字列の最初の文字が「1」の場合は、「ones」配列の 0 番目のインデックスに 1 を格納し、それ以外の場合は 0 を格納します。

ステップ 3

- for ループを使用して、文字列の 2 番目の要素からトラバースを開始します。 for ループでは、Ones[i] は、インデックス i の文字列の文字に基づいて、Ones[i-1] を 1 または 0 に加算して得られる値で初期化されます。

ステップ 4
    - 指定された文字列の最後の文字に応じて、Zeros[n-1] に 1 または 0 を格納します。
  • ステップ 5

  • - for ループを使用して、最後から 2 番目の文字から文字列を走査し、文字列の文字に基づいてゼロ リストの値を更新します。
  • ステップ 6
  • - 「min_zeros_to_remove」変数を定義し、最大の整数値で初期化します。
  • ステップ 7
  • - 次に、「0」リストと「1」リストをループします。ゼロ リストの「i 1」インデックスと「1」リストの「I」インデックスから値にアクセスします。その後、これら 2 つの要素を追加します。
  • ステップ 8
  • - 「min_zeros_to_remove」の値が「min_zeros_to_remove」変数の現在の値より小さい場合は、その値を 2 つの配列要素の合計に変更します。
  • ステップ 9 - 結果の値を返します。
  • ###例### リーリー ###出力### リーリー

  • 時間計算量

    - サイズ N の文字列とリストを反復するには for ループが必要なため、O(N)。

  • 空間複雑度

    - 1 と 0 のカウントを保存するために 2 つのリストを使用するため、O(N)。

    方法 2
  • この方法は、最初の方法の最適化バージョンです。ここでは、リストの代わりに 2 つの変数を使用して、1 と 0 の数を保存します。 ###アルゴリズム###

ステップ 1

- 「zeros_right」変数を定義し、0 で初期化します。

  • ステップ 2

    - 文字列をループし、指定された文字列内の「0」文字の合計数をカウントし、それに応じて「zero_right」変数の値を更新します。

  • ステップ 3

    - 「ones_left」変数を定義し、0 に初期化します。

ステップ 4

- for ループを使用して文字列を反復処理します。文字列内のインデックス i の文字が「1」の場合、「ones_left」変数の値を 1 増やします。それ以外の場合は、「zeros_right」変数の値を 1 減らします。

ステップ 5
    - 「zeros_right Ones_left」が「res」変数の現在の値より小さい場合は、「res」変数の値を更新します。
  • ###例### リーリー ###出力### リーリー

  • 時間計算量

    - O(N)、文字列を反復処理する場合。

  • 空間の複雑さ

    - 定数空間のみを使用するため、O(1)。

    ###結論は###
  • ユーザーは、指定されたバイナリ文字列から最小限の文字を削除する 2 つの方法を学習しました。 2 番目のアプローチのコードは、リストを使用する代わりに変数を使用して 0 と 1 の数を保存するため、より読みやすくなります。

以上がバイナリ文字列ですべての 0 を 1 の前に配置するために必要な最小移動数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホット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衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

バイナリ文字列内の最長の非増加サブシーケンス バイナリ文字列内の最長の非増加サブシーケンス Sep 07, 2023 pm 11:13 PM

この問題では、指定された文字列の最長の非増加サブシーケンスを見つける必要があります。非増加とは、文字が同じか降順であることを意味します。バイナリ文字列には「0」と「1」のみが含まれるため、結果の文字列は「1」で始まり「0」で終わるか、「0」または「1」で始まり「1」で終わる必要があります。この問題を解決するには、文字列の各位置で接頭辞「1」と接尾辞「0」を数え、接頭辞「1」と接尾辞「0」の最大合計を求めます。問題ステートメント - バイナリ文字列 str が与えられています。指定された文字列から最長の非増加サブシーケンスを見つける必要があります。例 入力 – str="010100"出力 – 4 は、最長の非再帰を示しています。

C++ で書かれており、1 から始まるバイナリ文字列の一意の順列の数を見つけます。 C++ で書かれており、1 から始まるバイナリ文字列の一意の順列の数を見つけます。 Sep 05, 2023 am 09:01 AM

この問題では、0 と 1 で構成される文字列が与えられており、1 から始まるすべての順列の合計数を見つける必要があります。答えは膨大な数になる可能性があるため、1000000007 を法にして出力します。 Input:str="10101001001"Output:210Input:str="101110011"Output:56 いくつかの組み合わせ数学を適用し、いくつかの式を設定することで、この問題を解決します。解決方法 この方法では、0 と 1 の数を数えます。ここで、n が文字列に現れる 1 の数、m が文字列に現れる 0 の数であると仮定します。

PHP では、pack() 関数の機能はデータをバイナリ文字列に変換することです。 PHP では、pack() 関数の機能はデータをバイナリ文字列に変換することです。 Aug 31, 2023 pm 02:05 PM

Pack() 関数は、データをバイナリ文字列にパックします。構文 Pack(format,args) パラメータ format - 使用する形式。可能な値は次のとおりです - a - NUL 埋め込み文字列 A - スペース埋め込み文字列 h - 16 進数文字列、下位ニブルが最初 H - 16 進数文字列、上位ニブルが最初 c - 符号付き文字 C - 符号なし文字 s - 符号付き short (常に 16 ビット) 、マシンバイトオーダー) S - 符号なし short (常に 16 ビット、マシンバイトオーダー) n - unsigned short (常に 16 ビット、ビッグエンディアンバイトオーダー) v - unsigned short (常に 16 ビット、リトルエンディアンバイトオーダー) i - 符号付き整数(マシンのサイズとバイト順序に依存します) I - なしの符号付き整数 (マシンのサイズとバイト順序に依存します)

バイナリ文字列内の等しくない文字とインデックスの文字ペアを交換することによって、文字列が回文文字列を形成できるかどうかをチェックします バイナリ文字列内の等しくない文字とインデックスの文字ペアを交換することによって、文字列が回文文字列を形成できるかどうかをチェックします Sep 02, 2023 pm 08:09 PM

問題文 文字列 str とバイナリ文字列 B があります。両方の文字列の長さは N に等しくなります。文字列 B 内に等しくない文字を含むインデックスのペアでその文字を複数回交換することで、文字列 str を回文文字列にできるかどうかを確認する必要があります。例 例 入力 str='AAS' B='101' 出力 'YES' 説明の中国語訳は次のとおりです。 説明 B[1] と B[2] が等しくないため、str[1] と str[2] を交換できます。 。最後の文字列は「ASA」にすることができます。 str=‘AASS’ B=‘1111’ と入力し、「No」を出力します。説明の中国語訳は次のようになります。文字列を回文にすることができないという説明、

部分文字列を繰り返し連結した長さ N のバイナリ文字列を計算します。 部分文字列を繰り返し連結した長さ N のバイナリ文字列を計算します。 Sep 07, 2023 am 10:13 AM

この記事の目的は、部分文字列を繰り返し連結して形成された長さ N のバイナリ文字列の数を数えるプログラムを実装することです。目標は、指定されたテキストの個々の部分文字列を繰り返し連結することによって、長さ N のバイナリ文字列をいくつ作成できるかを決定することです (N は正の整数)。問題文 部分文字列を繰り返し連結する長さ N のバイナリ文字列の数を数えるプログラムを実装します。例 例 1 入力、N = 3 の出力を考えます。 2 説明の中国語訳は次のとおりです。 説明 以下に、部分文字列が繰り返し連結される、長さ N = 3 の実行可能なバイナリ文字列をリストします。 "000":サブストリング

(空でない部分文字列を削除して) バイナリ文字列を空にした後、ゼロの数が最も少ないプレーヤーを検索します。 (空でない部分文字列を削除して) バイナリ文字列を空にした後、ゼロの数が最も少ないプレーヤーを検索します。 Sep 16, 2023 am 10:21 AM

この記事では、文字列操作とゲーム理論の分野に関連する興味深い問題について説明します。「空ではない部分文字列を削除してバイナリ文字列を空にし、残りのゼロが最も少ないプレイヤーを見つける」です。この質問では、競技ゲームでのバイナリ文字列の使用の概念について説明します。私たちの目標は、ゲーム終了時に残っている 0 が最も少ないプレイヤーを見つけることです。この問題について説明し、C++ コードの実装を示し、例を通して概念を説明します。問題文を理解する 2 人のプレーヤーにバイナリ文字列が与えられ、交代でゲームをプレイします。各ターンで、プレイヤーは少なくとも 1 つの「1」を含む空でない部分文字列を削除します。文字列が空になるか、文字列に「1」がなくなるとゲームは終了します。アクションを起こせないプレイヤーはゲームに負けます。課題は最後の 0 を見つけることです

指定されたバイナリ文字列から同じ長さの部分文字列を選択して、指定された関数を最大化します。 指定されたバイナリ文字列から同じ長さの部分文字列を選択して、指定された関数を最大化します。 Aug 28, 2023 am 09:49 AM

同じ長さの 2 つのバイナリ文字列 str1 と str2 が与えられた場合、同じ長さの指定された文字列から部分文字列を選択することによって、指定された関数値を最大化する必要があります。指定された関数は次のようになります - fun(str1,str2)=(len(substring))/(2^xor(sub1,sub2))。ここで、len(substring) は最初の部分文字列の長さ、xor(sub1,sub2) は指定された部分文字列の XOR です。これらはバイナリ文字列であるため、これが可能です。例 Input1:stringstr1=10110&stringstr2=11101Output:3 は、

バイナリ文字列ですべての 0 を 1 の前に配置するために必要な最小移動数 バイナリ文字列ですべての 0 を 1 の前に配置するために必要な最小移動数 Sep 23, 2023 pm 01:29 PM

問題ステートメント バイナリ文字列 str が与えられ、1 の前にすべての 0 を配置できるように文字列から最小限の文字を削除する必要があります。入力例 str=‘00110100111’ 出力 3 の説明 ここでは、2 つの方法で出力 3 を実現できます。 arr[2]、arr[3]、および arr[5]、または arr[4]、arr[6]、および arr[7] を文字列から削除できます。入力 str=‘001101011’ と出力 2 は、arr[4] と arr[6] を削除して、1 の前にすべての 0 を置くことができることを示しています。入力 str=‘000111’ 出力 0 は、指定された文字列内ですべてのゼロが 1 の前に配置されていることを意味するため、最初から開始する必要はありません。

See all articles